Windows 7进程ID循环引用

时间:2018-05-14 13:57:39

标签: c# windows recursion process windows-7

我观察到当使用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");
        }
    }        
}

0 个答案:

没有答案