我知道子进程将返回 0,而父进程将返回子进程的 PID 值。但是,如果调用多个 fork() 函数,子进程(或分叉 >= 2 次的进程)的子进程的返回值是多少?例如在:
int main()
{
Fork();
Fork();
printf("hello\n");
exit(0);
}
fork() 被调用了两次,因此子进程也将继续分叉。那么对此,从子进程中fork出来的进程会不会全部归0呢?任何帮助将不胜感激。
我知道子进程将返回 0,而父进程将返回子进程的 PID 值。但是,如果调用多个 fork() 函数,子进程(或分叉 >= 2 次的进程)的子进程的返回值是多少?例如在:
int main()
{
Fork();
Fork();
printf("hello\n");
exit(0);
}
fork() 被调用了两次,因此子进程也将继续分叉。那么对此,从子进程中fork出来的进程会不会全部归0呢?任何帮助将不胜感激。
如果我们稍微重写这段代码,输出可能会很有启发性。
当我运行它时,它的输出是:
于是,父进程调用fork,创建了进程286。然后父进程再次调用fork,创建了进程287。
同时,进程 286 调用 fork 并创建进程 288
图形化:
请注意,这些顺序可能会有所不同。在父母完成第二个分叉之前,没有什么可以阻止第一个孩子分叉。