Linux

輸出中出現意外的父程序 ID

  • October 1, 2016

我的程式碼是分叉一個程序並列印每個程序的 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()呼叫來更清楚地看到這種行為,以查看事情發生的順序。

有關子收割機的更多資訊,請查看此處

引用自:https://unix.stackexchange.com/questions/313708