我有下面的代码,通过与ntdll互操作获取Windows上的子进程列表。在Linux上有没有等同于'NtQueryInformationProcess',它是我的指定进程的父进程ID(如pbi.InheritedFromUniqueProcessId)?我需要通过Mono在Linux上运行代码,所以希望我希望只需要更改获取父进程ID的部分,以便代码保持与Windows上的大致相同。发现在Linux的特定过程的所有孩子的C#/ mono:获取Windows和Linux上的子进程列表
public IList<Process> GetChildren(Process parent)
{
List<Process> children = new List<Process>();
Process[] processes = Process.GetProcesses();
foreach (Process p in processes)
{
ProcessBasicInformation pbi = new ProcessBasicInformation();
try
{
uint bytesWritten;
NtQueryInformationProcess(p.Handle,
0, ref pbi, (uint)Marshal.SizeOf(pbi),
out bytesWritten); // == 0 is OK
if (pbi.InheritedFromUniqueProcessId == parent.Id)
children.AddRange(GetChildren(p));
}
catch
{
}
}
return children;
}
谢谢!从来没有想到/ proc文件系统!我只是在寻找系统调用,但这个解决方案同样好。 – johnrl 2010-03-24 17:15:00