使用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获取子进程的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习-进程管理

golang 热重启

Shell脚本入门 07:进程与信号

Shell脚本入门 07:进程与信号

关于wait 和 exit

创建一个不是创建进程子进程的新进程