在条件中使用 fork() 时,程序中创建了多少个进程?

How many processes are created in the program when using fork() in a condition?

我无法理解 fork() 用作条件时的工作原理。我知道 fork() 创建一个子进程作为父进程的精确副本。我的问题是,在下面的程序中创建了多少个进程?这是代码:

int global = 0;
int main() {
    while(global < 5 && !fork()) {
        sleep(1);
        global += 1;
    }
    printf("%d\n", global);
    return 0;
}

我假设对于每个 fork() 调用,每个已经 运行 的进程都会创建一个子进程并继续这样,只要变量 global 达到值 5。

fork() 在 child 中调用 returns 0,在 parent 中调用 child 的 pid

因此,在parent中,第二个条件的计算结果为0,循环退出,然后打印。在 child 中,第二个条件将评估为 non-zero,并且循环将再次使用更高的全局值(继承)进行分叉。

因此,除了parent之外,我们还会看到总共5个新进程。