将创建多少个进程?

时间:2018-06-11 10:07:00

标签: c unix process fork wait

排除初始父进程,以下代码将创建多少个进程:

fork();
wait(0);
fork();
wait(0);
fork();

我想到了7个过程,因为父亲总是等待孩子结束,但孩子永远不会退出。所以这将是2 ** n - 1。

1 个答案:

答案 0 :(得分:1)

每次调用fork函数都会创建一个新进程。每个进程(包括父进程)都将在fork调用后执行代码。每个父母都会等待其孩子死亡(请记住,当孩子调用fork时,它也会成为父母)。

绘制架构以确保:

enter image description here

这给出了7个进程,不包括父进程。

最右边的分支读取树,然后以下注释可能有意义:

fork();  // Process 'c0' was created
wait(0); // Parent process 'p' waits for its child 'c0' to change state.
fork();  // c1, c4
wait(0); // c0, p
fork();  // c2, c3, c5, c6

我用打印语句和流程创建的 Online Demo ' ID确认了这一点。

提醒wait()中的0参数:

  

等待进程组ID等于调用进程ID的任何子进程。

C - meaning of wait(NULL) when executing fork() in parallel中阅读更多内容。

请注意,如果您注释掉等待呼叫,则进程数量不会发生变化。