我们如何在这种条件下获得这个过程?过程的模式?

    int main (int argc, char **argv) {
    int i;
    int pid;
       for (i= 0; i < 3; i++) {
            pid = fork();

            if (pid < 0) break;// with this condition i dont understand??

       }
           while (wait(NULL) != -1);

最佳答案

fork() 将一个进程拆分为两个,并返回0(如果该进程是子进程),或者返回子进程的PID(如果该进程是父进程),或者返回-1(如果派生失败)。因此,此行:

if (pid < 0) break;

说“如果我们无法创建子进程,则退出循环”。

由于过程(圆圈)与循环中的fork()调用相对应的方式,因此该图有些困惑。当i分别为0、1和2时,将创建主流程的三个子流程(请参见本文底部的图表)。

由于循环从调用 fork 开始在父进程和子进程中都继续进行,因此 fork 是这样发生的:
  • i == 0:在原始父级中调用fork。现在有两个过程(最上面的一个和最左边的一个)。
  • i == 1:在两个现有进程中调用fork。新子项是从底部开始的第二层中最左边的子项,而是从底部开始的第三层中的中间子项。现在有四个进程
  • i == 2:在所有现有进程中调用fork。新的子节点是所有剩余的节点(底部节点,位于borrom的第二层中最右边的两个节点以及来自底部的第三层中最右边的节点)
  • i == 3:所有8个进程退出循环

  • 再次显示该图,其中的数字表示创建进程时循环中i的值:
                     -1  <--- this is the  parent that starts the loop
                  /   |  \
                 0    1   2
               /  \   |
              1    2  2
              |
              2
    

    关于c - 我不明白fork()的图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9269590/

    10-15 01:12
    查看更多