假设我有以下代码:
pid_t pid0, pid1;
pid0 = fork();
if (!pid0) {
pid1 = fork();
if (!pid1) { // p2
/* do something */
return;
} else { // p1
wait(NULL);
printf("p1 done\n");
return;
}
}
// p0
wait(NULL):
printf("p0 done\n");
打印语句的顺序是确定的,还是符合CPU的意愿?在实践中,它似乎每次都是相同的,但wait()
的文档使它看起来应该是随机的。
编辑:我已经考虑了一些,我想知道它是否总是按顺序排列,因为p0没有p2作为子进程;这是p1的孩子。所以“p0完成”将不会打印,直到p1完成等待它的孩子,p2。所以,我想真正的问题是wait()
是否等待孩子的孩子,或者只是处理一个“一代”
进程0将始终等待进程1,因为它是它唯一拥有的子进程。进程1将始终等待进程2,因为这是它唯一拥有的子进程。
进程0将不会从wait
返回,直到进程1退出,这意味着进程1已经打印了它的消息,因为它在退出之前就已经打印了。
因此,在这种情况下,在打印消息之后,进程0才能继续。