Как мне сделать дочерние процессы в Win32, чтобы они отображались в диспетчере задач как вложенные?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как мне сделать дочерние процессы в Win32, чтобы они отображались в диспетчере задач как вложенные?

Сообщение Anonymous »

У меня есть приложение Win32 C++. Я пытаюсь запустить один или несколько дочерних процессов с помощью CreateProcess. Я хочу, чтобы дочерние элементы закрывались одновременно с родительским.
Я добился этого, создав задание и включив JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE:

Код: Выделить всё

HANDLE hJob = CreateJobObject(NULL, NULL);

JOBOBJECT_EXTENDED_LIMIT_INFORMATION extendedInfo;
ZeroMemory(&extendedInfo, sizeof(extendedInfo));
extendedInfo.BasicLimitInformation.LimitFlags =
JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;

SetInformationJobObject(
hJob, JOBOBJECTINFOCLASS::JobObjectExtendedLimitInformation,
&extendedInfo, sizeof(extendedInfo));
Затем добавляем к этому заданию текущий (родительский) и созданный (дочерний) процессы:

Код: Выделить всё

// assign parent to job
AssignProcessToJobObject(hJob, GetCurrentProcess());

// launch child with no inherited handles
PROCESS_INFORMATION procInfo;
ZeroMemory(&procInfo, sizeof(procInfo));
STARTUPINFOA startInfo;
ZeroMemory(&startInfo, sizeof(startInfo));
startInfo.cb = sizeof(startInfo);
startInfo.dwFlags |= STARTF_USESTDHANDLES;
bool success = CreateProcessA(NULL,
"test.exe",  // command line
NULL,     // process security attributes
NULL,   // primary thread security attributes
FALSE,  // handles are inherited
0,      // creation flags
NULL,   // use parent's environment
NULL,   // use parent's current directory
&startInfo,  // STARTUPINFO pointer
&procInfo);  // receives PROCESS_INFORMATION
// assign child to job
AssignProcessToJobObject(hJob, procInfo.hProcess);
Это работает, но родительское приложение и дочернее приложение (

Код: Выделить всё

main.exe
и test.exe) отображаются в диспетчере задач как два несвязанных процесса:
[img]https: //i.sstatic.net/oqLgz.png[/img]

Изображение

(Несмотря на то, что закрытие main.exe закроет test.exe).
Что я делаю иначе, чем, скажем, Microsoft Teams или Chrome, которые имеют вложенные процессы?
Изображение


Подробнее здесь: https://stackoverflow.com/questions/702 ... in-task-ma
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»