之前有人问过这个问题,但我无法在代码中找到明确的答案。
我打开一个进程,ProcessA(PID 1234)。该进程打开一个子进程 ProcessAB (PID 5678)。 完成后,我终止了 ProcessA,但 ProcessAB 仍然挥之不去。
如何终止整个进程树?我的意思是,我如何确保如果我终止我打开的进程,我也会终止所有关联的进程?
谢谢
感谢代码。
最佳答案
检查 this thread用于在“作业”中对流程进行分组。
如果这对您不起作用,则本土方法可能如下所示:
- 获取您的主进程 ID
- 调用CreateToolhelp32Snapshot枚举系统上的所有进程
- 检查每个进程的 PROCESSENTRY32 结构的 th32ParentProcessID 成员,如果它与您的父 ID 匹配,则终止进程(使用 TerminateProcess)
- 所有子进程终止后,终止主进程
示例代码:
DWORD myprocID = 1234; // your main process id
PROCESSENTRY32 pe;
memset(&pe, 0, sizeof(PROCESSENTRY32));
pe.dwSize = sizeof(PROCESSENTRY32);
HANDLE hSnap = :: CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (::Process32First(hSnap, &pe))
{
BOOL bContinue = TRUE;
// kill child processes
while (bContinue)
{
// only kill child processes
if (pe.th32ParentProcessID == myprocID)
{
HANDLE hChildProc = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe.th32ProcessID);
if (hChildProc)
{
::TerminateProcess(hChildProc, 1);
::CloseHandle(hChildProc);
}
}
bContinue = ::Process32Next(hSnap, &pe);
}
// kill the main process
HANDLE hProc = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, myprocID);
if (hProc)
{
::TerminateProcess(hProc, 1);
::CloseHandle(hProc);
}
}
关于c - 终止进程树(Windows 的 C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24751633/