首先你得理解一个fork调用会返回两次,分别在父子进程中返回,并且返回值是不同的。
而fork以下的代码如果不加控制,就会分别在父子进程里面都继续执行下去。
要有效区分“当前”进程是父进程还是子进程的方法就是查看fork的返回值。
假如有一个进程,其pid为100,那么在这个进程来里面调用getpid()应该得到100。
接下来,该进程调用了fork(),产生了pid为101的子进程,那么
在原有的100进程(父)中,fork的返回值是101,也就是子进程的pid;
再次getpid()得到100,getppid()将得到祖父进程的pid,也就是既不是100,也不是101的其它值。
在新生的101进程(子)中,刚才产生了它本身的fork的返回值是0;
再次getpid()得到101,getppid()将得到100。