2009-10-06 68 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; 
} 

很明顯,需要額外的錯誤檢查。

相關問題