使用libproc获取子进程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用libproc获取子进程相关的知识,希望对你有一定的参考价值。
类似于this post中的建议,我使用libproc
获取所有正在运行的进程的列表。与htop
的树视图相比,我缺少获取父流程的所有子流程的能力。是否有方法或功能来获取它们?
您可以从/proc/<child-pid>/stat
提供的孩子的信息中提取父PID。
据我所知/proc
并未提供此信息。
要获取树,只需读取所有pid的parent-pid属性,然后自己建立反向索引。
在/proc/<pid>/task
中,我找到了要搜索的内容。所有子进程都在此处列出。不幸的是,我必须编写自己的代码才能从结构中获取信息,但这应该是可管理的:)。
如果您对使用libproc
感到震惊(例如,在没有linux的/proc
文件系统的系统上,则可以使用proc_listpids
。
XNU(macOS的内核)还提供了proc_listchildpids
,它仅调用proc_listchildpids
,但是返回PID的数量而不是原始字节数。
proc_listpids
[我觉得这更像是一个陷阱而不是方便,所以我更喜欢直接给自己打电话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);
。
以上是关于使用libproc获取子进程的主要内容,如果未能解决你的问题,请参考以下文章