Чтобы создать «дерево» или «папку» процесса, подобное отображаемому в диспетчере задач, необходимо выполнить два следующих требования:
- Процессы в дереве выполняют одну и ту же программу / приложение (сгруппировано по приложению).
- Между этими процессами есть родительско-дочерние отношения. Там родительский процесс запускает другие процессы, которые являются дочерними процессами. (Чтобы проверить отношения родитель-потомок, вы можете использовать инструмент Process Explorer .)
В вашем случае, хотя launcher.exe и java.exe (payload.jar) имеют отношения родитель-потомок, но не являются одной и той же программой / приложением, поэтому они не могут находиться в «дереве» или «папке процесса». 'в диспетчере задач.
См. " О процессах и потоках " " Дочерние процессы "
Чтобы продемонстрировать, как создать «дерево процессов», я создаю следующую демонстрацию: консольное приложение win32. (Запустите TestGroupProcesses.exe, каждый раз, когда вы нажимаете Enter, он создает дочерний процесс в дереве процессов.)
#include <windows.h>
#include <stdio.h>
int main()
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
printf("Press Enter to create the child process\n");
while (getchar() != '\n');
// Start the child process.
if (!CreateProcess(NULL, // No module name (use command line)
GetCommandLine(), // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi) // Pointer to PROCESS_INFORMATION structure
)
{
printf("CreateProcess failed (%d).\n", GetLastError());
}
// Wait until child process exits.
WaitForSingleObject(pi.hProcess, INFINITE);
// Close process and thread handles.
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
Процесс "дерево", созданный в приведенной выше демонстрации, выглядит следующим образом: