У меня есть код ниже для получения списка дочерних процессов в Windows путем взаимодействия с ntdll. Есть ли в Linux эквивалент NtQueryInformationProcess, который дает мне идентификатор процесса родителя указанного процесса (например, pbi.InheritedFromUniqueProcessId)? Мне нужен код для запуска в Linux через Mono, поэтому я надеюсь, что мне нужно изменить только часть, в которой я получаю идентификатор родительского процесса, чтобы код оставался в основном таким же, как в Windows.
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;
}