首页 > 解决方案 > 将创建多少进程?

问题描述

除去最初的父进程,下面这段代码会创建多少个进程:

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

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

标签: cunixprocessforkwait

解决方案


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

绘制一个模式以确保:

在此处输入图像描述

这给出了 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

我用打印报表和进程 ID 创建的Online Demo结果证实了这一点。


提醒中的0论点wait()

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

阅读C - 并行执行 fork() 时 wait(NULL) 的含义中的更多内容。

请注意,如果您注释掉等待调用,进程数不会改变。


推荐阅读