我有下面的代碼,通過與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