linux:以编程方式获取另一个进程的父pid?

时间:2009-10-06 13:30:11

标签: linux operating-system process

我试过谷歌,但发现getppid()获得当前进程的父pid。

我需要像getppid(some_other_pid)这样的东西,有这样的东西吗?基本上取一些进程的pid并返回父进程'pid。

6 个答案:

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