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

Sta*_*wed 0 c fork

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

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

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

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

Fab*_*ica 5

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

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

因此,fork()创建一个子节点,并且子节点不会从循环的开头开始:它从调用之后的指令开始fork,即从if(pids[i]==0){子节点为真的指令开始.然后它会做某事,然后break.Break意味着它退出for循环,因此子进程不再创建进程.

因此,父亲创造了N个孩子,而每个孩子都做了工作并且从循环中断开而不再创造孩子.