我正在尝试使用fork()
获取子进程中的父ID。但是,我没有获得正确的父ID。有时我会这样做,有时我不会。我的printf
为父ID打印1。这是我的代码片段。任何人都可以解释原因。
for(i = 1 ; i <= n ; i++){
if((pid = fork()) == 0){
printf("Parent id is %u\n", getppid()) ;
break ;
}
}
答案 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()
之前退出。