使用fork()在子进程中没有获得适当的父ID

时间:2014-03-26 15:01:51

标签: c linux fork

我正在尝试使用fork()获取子进程中的父ID。但是,我没有获得正确的父ID。有时我会这样做,有时我不会。我的printf为父ID打印1。这是我的代码片段。任何人都可以解释原因。

for(i = 1 ; i <= n ; i++){      
    if((pid = fork()) == 0){
        printf("Parent id is %u\n", getppid()) ;            
        break ;
    }
}  

1 个答案:

答案 0 :(得分:2)

ID为1的进程是 init 进程。来自top -p 1的输出(在我的Ubuntu机器上):

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND             
    1 root      20   0 24732 2704 1376 S    0  0.0   0:00.93 init                

如果某个进程是孤立的,init进程将采用orphaned process,而getppid()将在孤立进程中返回1。在您的情况下,父进程必须在子进程调用getppid()之前退出。