我观察到当使用ManagementObjectSearcher递归检查子进程ID时,我可以找到一些与启动父进程匹配的后代进程ID。如果pid对于每个进程实例都是唯一的,那么这是否可行?这是在Windows 7中,用C#编写的代码。
使用arg Process.GetCurrentProcess().Id
调用以下内容,因此它旨在结束由它生成的所有进程,但不会结束自身。
private void KillSpawnedProcesses(int pid)
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_Process Where ParentProcessID=" + pid);
ManagementObjectCollection moc = searcher.Get();
foreach (ManagementObject mo in moc)
{
if(mo["ProcessID"] != Process.GetCurrentProcess().Id)
{
KillSpawnedProcesses(Convert.ToInt32(mo["ProcessID"]));
try
{
Process proc = Process.GetProcessById(pid);
proc.Kill();
}
catch (ArgumentException)
{ /* process already exited */ }
}
else
{
//This line will occasionally be executed
Log("Don't kill current process");
}
}
}