C 使用多个分叉打印语句

C 使用多个分叉打印语句,c,fork,C,Fork,您忘记了每个进程在结束之前都会打印额外的时间 因此,例如,第一个进程打印“counter=0”、“counter=1”、“counter=2”,然后退出循环,在循环终止之前打印额外的“counter=2” 如果将每个printf更改为同时包含PID和它是哪个printf,代码将更容易理解 在循环中,计数器=1,pid=11755 在循环中,计数器=2,pid=11755 退出循环,计数器=2,pid=11755 在循环中,计数器=1,pid=11756 在循环中,计数器=2,pid=11756

您忘记了每个进程在结束之前都会打印额外的时间

因此,例如,第一个进程打印“counter=0”、“counter=1”、“counter=2”,然后退出循环,在循环终止之前打印额外的“counter=2”

如果将每个
printf
更改为同时包含PID和它是哪个
printf
,代码将更容易理解

在循环中,计数器=1,pid=11755
在循环中,计数器=2,pid=11755
退出循环,计数器=2,pid=11755
在循环中,计数器=1,pid=11756
在循环中,计数器=2,pid=11756
退出循环,计数器=2,pid=11756
在循环中,计数器=2,pid=11758
退出循环,计数器=2,pid=11758
在循环中,计数器=2,pid=11757
退出回路,计数器=2,pid=11757


我不明白的是,例如,为什么第一个fork会打印1和2,然后在循环后再打印一次2。2-in循环让我很困惑。@ssss如果忽略
fork()
调用(或注释掉并运行程序),您将看到程序打印12,因为这是您告诉它的。
int counter = 0;
int main()
{
   int i;
   for (i = 0; i < 2; i ++){
      fork();
      counter ++;
      printf("counter = %d\n", counter);
}
  printf("counter = %d\n", counter);
  return 0;
}
                      ____1____2__
                     |
           _____fork |____1____2__
          |     __________1____2___
          |fork|
          |    |
main__fork|____|_____________2_____  

The numbers 1 and 2 represent `counter` printed by `printf`. Could anyone explain this (visually would be great) ?