2009-10-06 43 views
17

我试过谷歌,但是发现getppid()它得到了当前过程的父亲pid。linux:以编程方式获取另一个进程的父进程?

我需要类似getppid(some_other_pid),有没有这样的事情?基本上需要一些进程的PID并返回父进程的PID。

+1

看看sysctl()系统调用和这个链接。 http://www.objectpark.net/parentpid.html – vpram86 2009-10-06 13:37:13

+1

@Aviator,为什么评论而不是答案? – hasen 2009-10-06 13:41:56

回答

22

我认为最简单的事情是打开“/ proc”并解析内容。

你会找到PPID为的/ proc/PID/STAT的第四个参数

+0

那么,'/ proc/ /'的哪个部分包含父pid? – hasen 2009-10-06 13:55:15

+5

4参数en/proc/pid/stat – 2009-10-06 14:01:43

+0

啊哈,真棒!你可以编辑答案将其添加到它吗? – hasen 2009-10-06 14:15:27

2

你可以看看sysctl()系统调用和this链接。

+0

尝试它“盲目折叠”,不知道为什么它不是编译。它仅适用于OS X吗?它应该在Linux上工作吗? – hasen 2009-10-06 13:51:44

+0

它只适用于BSD和OS X .. – vpram86 2009-10-06 15:45:06

+0

你应该创建一个更友好的超链接。 https://www.w3.org/QA/Tips/noClickHere – Jeff 2016-02-15 23:36:04

10

或Unix外壳,你可以尝试ps -p <child_pid> -o ppid=

+0

真棒简单的答案。对于一个命令,您可以复制/粘贴以查看它的行为。尝试**'ps -p $$ -o ppid ='**。 $$是当前的进程ID。 – Jess 2013-04-18 16:53:20

0

另一种方式从proc入口得到它:

cat /proc/<pid>/status | grep PPid: 
3

我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; 
} 

很明显,需要额外的错误检查。

相关问题