与this post中的建议一样,我使用libproc
来获取所有正在运行的进程的列表。与htop
的树视图相比,我能够获得父进程的所有子进程。有没有办法或功能来获得它们?
答案 0 :(得分:0)
您可以从/proc/<child-pid>/stat
提供的子信息中提取父pid。
据我所知,/proc
不提供相反的信息。
要在所有pid的parent-pid属性中读取树,然后自己构建反向索引。
答案 1 :(得分:0)
在/proc/<pid>/task
我找到了我搜索过的内容。所有子进程都列在那里。不幸的是,我必须编写自己的代码来从结构中获取信息,但这应该是可管理的:)。
答案 2 :(得分:0)
如果您对使用libproc
感到震惊(例如,在没有Linux /proc
文件系统的系统上),则可以使用proc_listpids
。
XNU(macOS的内核)还提供proc_listchildpids
,它仅调用proc_listpids
,但是返回PID的数量而不是原始字节数。
int
proc_listchildpids(pid_t ppid, void * buffer, int buffersize)
{
int numpids;
numpids = proc_listpids(PROC_PPID_ONLY, (uint32_t)ppid, buffer, buffersize);
if (numpids == -1) {
return -1;
} else {
return numpids / sizeof(int);
}
}
我觉得这不是一个方便,而是一个陷阱,所以我更喜欢直接给自己打电话proc_listpids
。