FreeBSD - 在 C 中从父进程 pid 查找子进程

问题描述 投票:0回答:1

这个问题专门针对 freeBSD。

我可以在 C 中调用操作系统函数来从父进程的进程 ID (pid) 获取子进程吗?

我正在寻找

pgrep -P <PID>
的作用。

我遇到过获取 kinfo_proc 但似乎没有提到任何子进程的 pid 存储在哪里。

在网上,我所能看到的就是迭代每个进程,以查找该进程的父进程 pid 是否是我正在搜索的进程。

这看起来效率极低,我想知道是否有任何函数/文件可以用来通过 pid 从父进程获取子进程。

请不要包含带有 procfs 的解决方案,因为该程序旨在在各种实例上运行,因此专门为我的系统设置类似 procfs 的东西将不起作用。

c operating-system freebsd
1个回答
0
投票

https://github.com/freebsd/freebsd-src/blob/main/bin/pkill/pkill.c


    /*
     * Retrieve the list of running processes from the kernel.
     */
    kd = kvm_openfiles(execf, coref, NULL, O_RDONLY, buf);
    if (kd == NULL)
        errx(STATUS_ERROR, "Cannot open kernel files (%s)", buf);

© www.soinside.com 2019 - 2024. All rights reserved.