gpt4 book ai didi

c++ - 由 JOB 中的进程启动的子进程能否将 JOB 属性设置为脱离作业?

转载 作者:可可西里 更新时间:2023-11-01 09:19:00 26 4
gpt4 key购买 nike

子进程是作业的一部分,由创建作业的进程启动。父进程尚未设置作业属性以允许脱离作业。需要在 JOB 上设置“JOB_OBJECT_LIMIT_BREAKAWAY_OK”标志以允许子进程脱离作业,但未设置。

子进程能否更改此作业属性并设置标志 JOB_OBJECT_LIMIT_BREAKAWAY_OK 以便它或它的子进程可以不受 JOB 影响运行。在线搜索但没有找到任何地方是否可以做到这一点。

已经引用的链接

https://learn.microsoft.com/en-us/windows/desktop/procthread/job-objectshttps://learn.microsoft.com/en-us/windows/desktop/procthread/process-creation-flags

没有说我们是否可以那样做。或者,如果需要,那么该怎么做。

我编写了一个示例应用程序,其中父进程创建了一个没有 JOB_OBJECT_LIMIT_BREAKAWAY_OK 标志的作业。并编写了由 parent 开始的示例应用程序。在这个 child 中,我尝试设置 JOB 属性,如下所示:

if (bInJob)
{
JOBOBJECT_EXTENDED_LIMIT_INFORMATION info1 = {};
QueryInformationJobObject(NULL, JobObjectBasicLimitInformation, &info1.BasicLimitInformation, sizeof(info1.BasicLimitInformation), NULL);
DWORD dwLimitFlags = info1.BasicLimitInformation.LimitFlags;

SetLastError(0);
info1.BasicLimitInformation.LimitFlags |= JOB_OBJECT_LIMIT_BREAKAWAY_OK;
if (SetInformationJobObject(NULL, JobObjectExtendedLimitInformation, &info1, sizeof(info1)))
{
cout << "failed";
}
DWORD fileError = GetLastError();

JOBOBJECT_BASIC_LIMIT_INFORMATION info = {};
QueryInformationJobObject(NULL, JobObjectBasicLimitInformation, &info, sizeof(info), NULL);
dwLimitFlags = info.LimitFlags;
}

它不起作用,JOB 属性保持不变。

最佳答案

对于设置JOB_OBJECT_LIMIT_BREAKAWAY_OK,您需要调用SetInformationJobObject

电话SetInformationJobObject您需要处理正在设置限制的工作。

但是您在此处传递了 NULL 句柄。因此此时您必须得到 ERROR_INVALID_HANDLE

来自 IsProcessInJob

An application cannot obtain a handle to the job object in which it is running unless it has the name of the job object. However, an application can call the QueryInformationJobObject function with NULL to obtain information about the job object.

所以系统特殊不会返回给你运行的作业对象的句柄。这是设计使然。如果 child 可以将自己从工作中解脱出来,这会严重扼杀工作意识,以限制子进程。

关于c++ - 由 JOB 中的进程启动的子进程能否将 JOB 属性设置为脱离作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52112113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com