**伪!
fork();
printf(--print process ID);
fork();
printf(--print process ID);
fork();
printf(--print process ID);
这...我今天在8个过程中假设结果(如果我错了,请纠正我)。
现在,如果等待呼叫被添加到此,会发生什么?
fork();
wait(..);
printf(--print process ID);
fork();
wait(..);
printf(--print process ID);
fork();
wait(..);
printf(--print process ID);
我认为1)进程数量相同而且2)printf()
打印件看起来也一样吗?
答案 0 :(得分:3)
真。等待调用将对进程执行的顺序施加一些限制,但您仍将有8个进程。 printf语句看起来是一样的,但它们可能会改变的顺序。
在第一个版本中可以但不能保证所有8个进程将同时执行,在等待的版本中,并发进程的数量肯定永远不会达到8个。
在我的系统上,wait()只会在直接子项完成后返回,这样您的等待版本将确定性地打印:在父母继续之前,孩子将始终完成。
通常,您会看到
N+1 //first printf
N+2 //second printf
N+3 //third printf
N+2 //third printf
N+1 //second printf
N+4 //third printf
N+1 //third printf
N //first printf
N+5 //second printf
N+6 //third printf
N+5 //third printf
N //second printf
N+7 //third printf
N //third printf
其中N是根进程的pid。获得一个很好的连续PID数块取决于我倾向于在* nix系统上看到的通常的pid分配方案,而不是在你的玩具程序运行时设法启动其他进程。
我不熟悉足够多种操作系统100%表示你永远不会遇到等待孙子孙女的等待(),但听到这个消息后我会非常惊讶。