|
|
发表于 2006-3-1 17:29:39
|
显示全部楼层
Post by todaygood
此时肯定是父进程先执行到waitpid 这一句,...
APUE, 或者 fork(2) 的手册也多次说到, fork 以后父子进程的执行顺序不定.
就执行if (pid>0) exit(0);可见孙子进程立即退出
孙子进程, 或者如程序中所说的第二个子进程怎么会立即退出呢?
if(pid > 0) exit(0); 是说如果第一个子进行执行的 fork 成功, 第一个子进程就立即退出.
fork 成功后会在父进程中返回其生成的子进程的 pid, 该值一定大于 0; 而在子进程中返回
的则是 0.
sleep (2); //
printf("second child ,parent pid =%d\n",getppid() );
exit (0);
这几句是由儿子进程运行的,
恰好这几句是由第二个子进程执行的. 原因见上.
在孙子进程中调用sleep以保证在打印父进程ID时儿子进程已终止。
这种方法不可靠, 其结果和当时系统的负载已经调度算法都有关系, APUE 中也提到了这一点.
与你的理解大相径庭是因为你理解错了, 或者没有认真看书 :-)
这个例子是在讲解如果进程的父进程在其退出前就已退出, 该子进程会被"过继"给 init 进程时
出现的, 建议还是再仔细的看一下APUE中的相关讲解. |
|