使用libproc获取子进程

时间:2013-06-18 16:32:29

标签: c linux process

this post中的建议一样,我使用libproc来获取所有正在运行的进程的列表。与htop的树视图相比,我能够获得父进程的所有子进程。有没有办法或功能来获得它们?

3 个答案:

答案 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