fork()如何停止创建子项?

时间:2018-04-30 00:17:52

标签: c fork

有谁能解释一下这是如何运作的?

如果我的代码中有类似

的内容
tweet id  tweet created minute  Game start minute  Game end minute         
1001      145678                145600             145730   
1002      145678                145600             145730   
1005      145680                145600             145730   
12278     145687                145600             145730     
765558    145688                145600             145730     
724323    145689                145600             145730     
875857    145688                145600             145730     
79375     145685                145600             145730     
84666     145686                145600             145730     
335556    145687                145600             145730     
29990     145688                145600             145730     
56        145689                145600             145730 
968867    145690                145600             145730     
8452      145691                145600             145730   
1334      145679                145600             145730  

我不会再创造N个孩子,然后在每个孩子中再次N个孩子并最终成为一个循环吗?

2 个答案:

答案 0 :(得分:5)

来自http://www.csl.mtu.edu/cs4411.ck/www/NOTES/process/fork/create.html(强调我的):

  

创建新子进程后,两个进程将执行fork()系统调用后的下一条指令

因此,fork()创建一个子节点,子节点不从循环开始处开始:它从调用fork之后的指令开始,即从{{1}开始这对孩子来说是真实的。然后它将做某事,然后if(pids[i]==0){。中断意味着它退出break循环,因此子进程不再创建进程。

所以,父亲创造了N个孩子,而每个孩子都做了工作,在没有创造更多孩子的情况下从循环中休息。

答案 1 :(得分:4)

  

我不会创造N个孩子吗

  然后在每个孩子N个孩子再次

不,为什么?每个子进程都执行for并离开循环。没有创建进一步的流程。

  

并以循环结束?

即使你没有那个break;,每个孩子也只会执行break;循环的其余部分。它不会从for重新启动。这意味着在每次迭代中,进程数量都会翻倍,因此您最终会得到i = 0个进程。但是使用2^N,它只是简单的break;