Я хочу завершить пакет и все процессы, порожденные им, когда-нибудь
для этого существует Объекты заданий :
AОбъект задания позволяет управлять группами процессов как единым целым.
Чтобы завершить все процессы, в настоящее время связанные с объектом задания, используйте функцию TerminateJobObject .
if (HANDLE hJob = CreateJobObjectW(0, 0))
{
WCHAR ApplicationName[MAX_PATH];
if (GetEnvironmentVariableW(L"ComSpec", ApplicationName, RTL_NUMBER_OF(ApplicationName)))
{
PROCESS_INFORMATION pi;
STARTUPINFOW si = { sizeof(si) };
if (CreateProcessW(ApplicationName, L"cmd /c <some path>/batch.bat",
0, 0, 0, CREATE_SUSPENDED, 0, 0, &si, &pi))
{
if (AssignProcessToJobObject(hJob, pi.hProcess))
{
ResumeThread(pi.hThread);
}
else
{
TerminateProcess(pi.hProcess, 0);
}
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
}
}
// .. wait for something ...
TerminateJobObject(hJob, 0);
CloseHandle(hJob);
}
однако новые процессы могут быть запущены, скажем, через удаленный комзвонки (StartService
например) - формально из другого процесса.это, конечно, не будет в работе и не прекращается