我正在尝试在运行pid
命令后打印fork()
进程。这是我的代码 -
#include <stdio.h>
#include <unistd.h>
int main(void)
{
int pid;
pid=fork();
if(pid==0)
printf("I am the child.My pid is %d .My parents pid is %d \n",getpid(),getppid());
else
printf("I am the parent.My pid is %d. My childs pid is %d \n",getpid(),pid);
return 0;
}
这是我得到的答案 -
I am the parent.My pid is 2420. My childs pid is 3601
I am the child.My pid is 3601 .My parents pid is 1910
为什么第二行中的父母ID不是2420
。为什么我会1910
如何获得此值?
答案 0 :(得分:7)
在孩子执行printf
来电之前父母正在退出。当父母退出时,孩子会得到一个新的父母。默认情况下,这是init
进程,PID 1.但最新版本的Unix增加了进程将自己声明为“subreaper”的能力,该子进程继承了所有孤立的子进程。 PID 1910显然是您系统的辅助设备。有关详细信息,请参阅https://unix.stackexchange.com/a/177361/61098。
在父进程中调用wait()
,使其等待子进程继续运行。
#include <stdio.h>
#include <unistd.h>
int main(void)
{
int pid;
pid=fork();
if(pid==0) {
printf("I am the child.My pid is %d .My parents pid is %d \n",getpid(),getppid());
} else {
printf("I am the parent.My pid is %d. My childs pid is %d \n",getpid(),pid);
wait(NULL);
}
return 0;
}