fork()'ing 示例

fork()'ing example

我在理解以下代码时遇到一些问题。如果我 运行 程序带有 单个参数(argc of 2), for fork() 运行 两次并创建 2 个子进程。所以总进程应该是3,对吧?但是我的教授说他们应该是 4。我不明白为什么。

如果其中一个子进程创建了另一个 fork(),为什么不创建第二个?当我们使用 两个参数 的程序时会发生什么?有人可以逐步解释吗?

#include <unistd.h>
int main(int argc, char *argv[])
{
    int c;
    for (c = 0; c < argc; c++) {
        (void) fork();
    }

    return 0;
}

Could someone explain step-wise?

第 1 步:进程 1 在 c = 0 时调用 fork()。进程 2 创建为当前状态的副本。

步骤 2:进程 1 在 c = 1 时调用 fork()。进程 3 创建为当前状态的副本。

步骤 3:进程 2 在 c = 1 时调用 fork()。进程 4 创建为当前状态的副本。

第 4 步: 进程 3 从 c = 1 开始,因此 for 循环在递增到 c = 2 后终止,没有进一步的进程已创建。

步骤 5: 进程 4 从 c = 1 开始,因此 for 循环在递增到 c = 2 后终止,没有进一步的进程已创建。

进程总数:4。