首先阅读分叉手册页 http://linux.die.net/man/2/fork以及getppid http://pubs.opengroup.org/onlinepubs/009695399/functions/getppid.html / getpid http://linux.die.net/man/2/getpid手册页。
来自叉子的
成功后,子进程的 PID 将返回到父进程中
执行线程,并且在子线程中返回 0
执行。失败时,将在父级上下文中返回 -1,
不会创建任何子进程,并且 errno 将被适当设置。
所以这应该是这样的
if ((pid=fork())==0){
printf("yada yada %u and yada yada %u",getpid(),getppid());
}
else{ /* avoids error checking*/
printf("Dont yada yada me, im your parent with pid %u ", getpid());
}
至于你的问题:
这是子进程。我的 pid 是 22163,我父母的 id 是 0。
这是子进程。我的 pid 是 22162,我父母的 id 是
22163.
fork()
在之前执行printf
。因此,完成后,您将有两个进程执行相同的指令。因此,printf会执行两次。致电给fork()
将返回0
到子进程,以及pid
子进程到父进程。
你有两个正在运行的进程,每个进程都会执行这个 instruction 语句:
printf ("... My pid is %d and my parent's id is %d",getpid(),0);
and
printf ("... My pid is %d and my parent's id is %d",getpid(),22163);
~
总结一下,上面的行是子行,指定它的pid
。第二行是父进程,指定其 id (22162) 及其子进程 (22163)。