考虑下面的代码片段:
int main()
{
fork();
fork();
fork();
printf("Hello World\n");
}
我得到的输出是:[ubuntu 12.04]
aashish@aashish-laptop:~$ ./a.out
Hello World
Hello World
Hello World
aashish@aashish-laptop:~$ Hello World <---------------------------
Hello World
Hello World
Hello World
Hello World
为什么“Hello World”会在进程执行结束后输出?
fork()
并不会输出任何内容。当然,由fork()
创建的各个子进程在退出之前会输出一行信息。有时候,顶级进程(初始进程)会在它的某些子进程之前完成,所以这些子进程会在 shell 写出下一个命令提示符之后再输出它们的信息。如果你希望父进程等待(使用waitpid()
或wait()
)直到它的子进程死亡后再退出,你需要编写相应的代码。在输出的信息中包括 PID (getpid()
) 会有助于你了解正在发生的事情。 - Jonathan Leffler