在条件中使用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值继续像
fork()
调用在子代中返回0,在父代中返回pid
。
因此,在父项中,第二个条件将评估为0,循环将退出并打印。在孩子中,第二个条件将评估为非零,并且循环将再次以更高的全局值(这是继承的)分叉。
因此,除父项外,我们还会看到总共5个新进程。
Downvoter照顾纠正这个答案? – merlin2011
我没有投票,但“循环将退出而不打印”对我来说似乎是错误的。它应该退出循环并打印,不是吗? –
要么我误读了原来的问题,要么就是编辑过。当我到达一台电脑时,我会纠正这个问题。谢谢! – merlin2011
当你尝试时发生了什么? –
@MartinJames它输出5作为全局值。 –