main() {
fork();
fork();
printf("Hello world\n");
}
在上面的程序中,父进程产生子进程。子进程反过来产生了孙子进程。执行此程序后,我得到以下输出。
Macintosh:unix NightFury$ ./a.out
Hello world
Hello world
Hello world
Macintosh:unix NightFury$ Hello world
为什么输出不是单个过程输出?是的,应该打印4个“Hello world”,但为什么最后一个打印为单独的过程?
答案 0 :(得分:4)
shell等待 first 进程结束,然后再次打印shell提示符。你有三个其他进程正在运行,那时候有两个进程在shell提示符出现之前编写了输出,然后有一个进程写了输出。每次运行程序时,事情可能不会按照这个确切的顺序发生 - 有时候你可能会在这个例子之前或之后得到shell提示符。
这就是你可以编写在“背景”中继续运行的程序。
答案 1 :(得分:1)
它们实际上是作为一个打印但是父进程死了,因此shell打印出“Macintosh:unix NightFury $”行,最后剩下的子进程打印出它的行。 你实际上应该可以通过添加一行来请求父进程等到每个孩子都死了,然后不应该有那条线。