Циркулярная ссылка на идентификатор процесса Windows 7 - PullRequest
0 голосов
/ 14 мая 2018

Я наблюдаю, что при рекурсивной проверке идентификаторов дочерних процессов с помощью ManagementObjectSearcher я могу найти некоторый идентификатор процесса-потомка, который соответствует начальному родительскому процессу. Должно ли это быть возможным, если 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");
        }
    }        
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...