我试过谷歌,但发现getppid()
获得当前进程的父pid。
我需要像getppid(some_other_pid)
这样的东西,有这样的东西吗?基本上取一些进程的pid并返回父进程'pid。
答案 0 :(得分:28)
我认为最简单的方法是打开“/ proc”并解析内容。
你会发现ppid是/ proc / pid / stat
的第4个参数答案 1 :(得分:12)
或者从unix shell中可以尝试ps -p <child_pid> -o ppid=
答案 2 :(得分:5)
我迟到了7年,但是对于任何可能偶然发现这个问题的人来说,这是OS X上的另一种解决方案。这里发布的其他答案都是正确的,sysctl()
将完成这项工作,但你也可以使用proc_pidinfo
获取有关流程的大量有用信息。
#include <libproc.h>
int getppid(const pid_t pid)
{
proc_bsdinfo info;
proc_pidinfo(pid, PROC_PIDTBSDINFO, 0, &info, sizeof(info));
return info.pbi_ppid;
}
显然,需要进行额外的错误检查。
答案 3 :(得分:2)
您可以查看sysctl()
系统调用和this链接。
答案 4 :(得分:2)
从proc条目中获取它的另一种方法:
cat /proc/<pid>/status | grep PPid:
答案 5 :(得分:1)
我们也可以使用pstree
命令。
pstree -p -s <pid of the process>
pstree -s
给出所有祖先的树。添加-p
也将为您提供pid。
示例:假设存在一个进程,其pid = 6206。使用pstree
命令
pstree -p -s 6206
您将获得进程树。
systemd(1)───lightdm(1066)───lightdm(1191)───upstart(1360)───gnome-terminal-(5222)───bash(5229)───cpu-print(6206)
此处父级PID为5229