c # - Windows 7 Proces ID cirkulær reference

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bemærker, at når jeg recursivt inspicerer børneproces-id'er med ManagementObjectSearcher, kan jeg finde nogle efterkommere-proces-id, der matcher startprocessen. Hvis dette skulle være muligt, hvis pid'et er unikt for hver instans af en proces? Dette er i Windows 7, kode skrevet i C #.


Det følgende kaldes med arg Process.GetCurrentProcess().Id og det er således meningen at afslutte alle processer, der er opstået af den, men ikke selv.


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");
        }
    }        
}

Bedste reference