2014-03-03 81 views
0

我想知道 - 如果可能的話 - 如何獲得一個進程的祖父母(或更進一步)的PID。如何獲得祖父母/祖先進程ID?

更具體地說,我想要一個進程在進程樹中打印它的深度。 例如,用下列起始時:

int main() { 
    int creator_id = (int) getpid(); 
    pid_t pid1 = fork(); 
    pid_t pid2 = fork(); 
    pid_t pid3 = fork();   

    //print depth in process tree of each process 

    return 0; 
} 

根據我的理論,樹看起來就像這樣:

   0 
       /|\ 
      /| \ 
      /| \ 
      0 0 0 
     /\ |    
     0 0 0 
     /   
     0 

所以我的第一個想法就是以某種方式看到我有多久去直到找到創建者的pid。

作爲一個小小的註釋: 我也想知道是否可以從下往上打印,這意味着最深層的所有過程都會先打印出來。

回答

0

如何獲得一個進程的祖父母(或更進一步)的PID。

這取決於哪個操作系統您正在使用,因爲您使用fork()在你的例子來創建新的進程,我想你使用的是一些類似於Unix的操作系統。

如果您使用的是Linux並知道進程的PID,則可以從該文件的第四個字段/proc/[pid]/stat獲取其父進程的PID。通過這個親子鏈,你可以找到一個過程'所有的祖先。