我想列出給定進程的所有子代(因爲它是進程ID)。 經過一番研究,我得出這樣的:列出進程的所有子代
static void Main(string[] args)
{
listChildProcesses(0);
Console.ReadKey();
}
public static void listChildProcesses(int parentProcessId)
{
String myQuery = string.Format("select * from win32_process where ParentProcessId={0}", parentProcessId);
ObjectQuery objQuery = new ObjectQuery(myQuery);
ManagementObjectSearcher objSearcher = new ManagementObjectSearcher(objQuery);
ManagementObjectCollection processList = objSearcher.Get();
foreach (ManagementObject item in processList)
{
try
{
int processId = Convert.ToInt32(item["ProcessId"].ToString());
Console.WriteLine("processId:{0} name:{1} {2}",
item["ProcessId"],
item["Name"],
item["ParentProcessId"]
);
// recursive call
if (processId != parentProcessId)
listChildProcesses(processId);
}
catch (Exception e)
{
Console.WriteLine("Error: " + e);
}
}
}
我希望這可以讓我來顯示所有的進程(因爲該方法開始於PID = 0,然後被遞歸調用每個PID從那裏找到)。
但這裏是輸出我得到在我的Windows 8(86):
processId:0 name:System Idle Process 0
processId:4 name:System 0
processId:300 name:smss.exe 4
它停在那裏。我希望它繼續與系統的每個孩子,然後是這些孩子的每個孩子。
[我如何獲得C#中給定服務的子進程列表?](http://stackoverflow.com/questions/1073615/how-can-i-get-a-list-of -child-processes-for-a-se-sevice-in-c) – MethodMan 2013-03-26 17:47:36
謝謝你的指出!我在試圖理解這一點時,實際上看到了這一點。但是它沒有提到我爲什麼遞歸調用沒有列出所有問題。 – Juicy 2013-03-26 17:55:08