[英]Return value of child processes in fork()
我知道子进程将返回 0,而父进程将返回子进程的 PID 值。 但是,如果调用多个 fork() 函数,子进程(或分叉 >= 2 次的进程)的子进程的返回值是多少? 例如在:
int main()
{
Fork();
Fork();
printf("hello\n");
exit(0);
}
fork() 被调用了两次,因此子进程也将继续分叉。 那么对此,从子进程中fork出来的进程会不会全部归零呢? 任何帮助将不胜感激。
如果我们稍微重写这段代码,output 可能会很有启发性。
int main()
{
int a, b;
printf("pid=%d\n",getpid());
a=fork();
printf("pid=%d a-fork=%d\n",getpid(), a);
b=fork();
printf("pid=%d a-fork=%d b-fork=%d\n",getpid(), a, b);
}
当我运行它时,其中的 output 是:
pid=285
pid=285 a-fork=286
pid=286 a-fork=0
pid=285 a-fork=286 b-fork=287
pid=286 a-fork=0 b-fork=288
pid=287 a-fork=286 b-fork=0
pid=288 a-fork=0 b-fork=0
于是,父进程调用fork,创建了进程286。然后父进程再次调用fork,创建了进程287。
同时,进程 286 调用 fork 并创建进程 288
图形化:
a-fork b-fork
285 -> 286, 287
286 -> 288
请注意,这些顺序可能会有所不同。 在父母完成第二个分叉之前,没有什么可以阻止第一个孩子分叉。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.