Linux
輸出中出現意外的父程序 ID
我的程式碼是分叉一個程序並列印每個程序的 PID 和 PPID。我期待孩子的 PPID 與父母的 PID 相同,但事實並非如此。
我正在使用 Ubuntu 14.04。
#include <stdio.h> #include <sys/wait.h> int main(){ int pid; pid = fork(); if(pid==0){ printf("\nI am the child and my parent id is %d and my id %d\n", getppid(), getpid()); } else printf("\nI am the parent and my pid is %d and my parent id is %d\n", getpid(), getppid()); return 0; }
這是我得到的輸出:
I am the parent and my pid is 29229 and my parent id is 27087 I am the child and my parent id is 1135 and my id is 29230
我的猜測是:父母先於孩子回來,孩子成了孤兒。PID 1135 必須是您的使用者初始化程序,它成為該程序的新父程序。(Ubuntu 使用者會話中有 2 個子收割者)。
$ ps -ef | grep init you 1135 ... init --user
如果您希望您的父母等待其孩子,請使用
wait
. 您實際上已經擁有include
:#include <stdio.h> #include <sys/wait.h> int main(){ int pid; pid = fork(); if(pid == 0) printf("\nI am the child and my parent id is - %d and mine id %d\n",getppid(),getpid()); else{ printf("\nI am the parent and my pid is %d and my parent id is %d\n",getpid(),getppid()); wait(NULL); } return 0; }
這將確保父級不會在子級之前退出
printf
。您可以通過在這里和那裡插入一些sleep()
呼叫來更清楚地看到這種行為,以查看事情發生的順序。有關子收割機的更多資訊,請查看此處。