c - fork() 如何停止创建孩子?
问题描述
谁能解释我这是如何工作的?
如果我的代码中有类似的东西
int pids[N];
for(int i = 0; i < N; i++){
pids[i] = fork();
if(pids[i]==0){
//do something
break;
}
}
我不会创建 N 个孩子,然后在每个孩子中再创建 N 个孩子并最终进入循环吗?
解决方案
来自http://www.csl.mtu.edu/cs4411.ck/www/NOTES/process/fork/create.html(强调我的):
创建新的子进程后,两个进程都将执行 fork() 系统调用之后的下一条指令。
所以,fork()
创建一个孩子,并且孩子不是从循环的开头开始:它是从调用 to 之后的指令开始的fork
,即 from if(pids[i]==0){
,这对于孩子来说是正确的。然后它会做一些事情,然后break
。Break 意味着它退出for
循环,因此子进程不再创建任何进程。
因此,父亲创建了 N 个孩子,而每个孩子完成工作并从循环中中断,而不再创建任何孩子。