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

问题描述:

我很难理解fork()在用作条件时是如何工作的。我知道fork()创建一个子进程作为父进程的确切副本。我的问题是,在以下程序中创建了多少个进程?下面是代码:在条件中使用fork()时程序中创建了多少个进程?

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

我是一个假设每个fork()调用,已运行每个进程会创建一个子进程,并只要变量全球达到5值继续像

+0

当你尝试时发生了什么? –

+0

@MartinJames它输出5作为全局值。 –

fork()调用在子代中返回0,在父代中返回pid

因此,在父项中,第二个条件将评估为0,循环将退出并打印。在孩子中,第二个条件将评估为非零,并且循环将再次以更高的全局值(这是继承的)分叉。

因此,除父项外,我们还会看到总共5个新进程。

+0

Downvoter照顾纠正这个答案? – merlin2011

+0

我没有投票,但“循环将退出而不打印”对我来说似乎是错误的。它应该退出循环并打印,不是吗? –

+1

要么我误读了原来的问题,要么就是编辑过。当我到达一台电脑时,我会纠正这个问题。谢谢! – merlin2011