这个问题专门针对 freeBSD。
我可以在 C 中调用操作系统函数来从父进程的进程 ID (pid) 获取子进程吗?
我正在寻找
pgrep -P <PID>
的作用。
我遇到过获取 kinfo_proc 但似乎没有提到任何子进程的 pid 存储在哪里。
在网上,我所能看到的就是迭代每个进程,以查找该进程的父进程 pid 是否是我正在搜索的进程。
这看起来效率极低,我想知道是否有任何函数/文件可以用来通过 pid 从父进程获取子进程。
请不要包含带有 procfs 的解决方案,因为该程序旨在在各种实例上运行,因此专门为我的系统设置类似 procfs 的东西将不起作用。
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);