繁体   English   中英

fork()中子进程的返回值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM