列出进程的所有子代
问题描述:
我想列出给定进程的所有子代(因为它是进程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
它停在那里。我希望它继续与系统的每个孩子,然后是这些孩子的每个孩子。
答
你不这样做,你在想什么......
这样你刚上市的孩子。你正在通过'0'来访问空闲的。
尝试这样的事情让所有的进程......
ManagementClass mngcls = new ManagementClass("Win32_Process");
foreach (ManagementObject instance in mngcls.GetInstances())
{
Console.Write("ID: " + instance["ProcessId"]);
}
...那么你在做什么。
[我如何获得C#中给定服务的子进程列表?](http://*.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