首页 > 解决方案 > fork() 如何停止创建孩子?

问题描述

谁能解释我这是如何工作的?

如果我的代码中有类似的东西

int pids[N];
for(int i = 0; i < N; i++){
    pids[i] = fork();
    if(pids[i]==0){
        //do something
        break;
    }
}

我不会创建 N 个孩子,然后在每个孩子中再创建 N 个孩子并最终进入循环吗?

标签: cfork

解决方案


来自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 个孩子,而每个孩子完成工作并从循环中中断,而不再创建任何孩子。


推荐阅读