Дочерний процесс является частью задания и запускается процессом, который создает задание.
Родительский процесс уже не установил свойства JOB для разрешения отрыва от работы. Флаг «JOB_OBJECT_LIMIT_BREAKAWAY_OK» требуется установить на JOB, чтобы разрешить дочерним процессам отрываться от задания, но он не установлен.
Может ли дочерний процесс изменить свойства этого задания и установить флаг JOB_OBJECT_LIMIT_BREAKAWAY_OK, чтобы его или его дочерние процессы могли работать свободно от JOB.
В сети искал, но нигде не нашел, можно ли это сделать.
Уже ссылающиеся ссылки
https://docs.microsoft.com/en-us/windows/desktop/procthread/job-objects и https://docs.microsoft.com/en-us/windows/desktop/procthread/process-creation-flags
не говорит, можем ли мы это сделать. Или, если требуется, то как это сделать.
Я написал пример приложения, в котором родительский процесс создает задание без флага JOB_OBJECT_LIMIT_BREAKAWAY_OK. И написал пример приложения, которое запускается родителем. У этого ребенка я попытался установить свойства 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 остались без изменений.