函数 fork() 是如何工作的,使得“父”进程创建另外 6 个进程?

问题描述 投票:0回答:1

在此代码片段中:

#include <stdio.h>

int main(int argc, char **argv){
  for(int i=0;i<2;i++){
    printf("i: %d\n",i);
    if(fork() | fork()) {
      fork();
    }
  }
}

问题是数字 1 被打印到 stdout 多少次,它是 7 次,但我无法弄清楚如何以及为什么,例如函数 fork() 是如何工作的,以便“父亲”进程创建 6 个其他进程?

我认为第一个fork创建了另一个进程(总共2个),第二个fork创建了另外两个进程(总共4个),最后嵌套的fork将创建4个其他进程(总共8个),但情况似乎并非如此,我想我在这里弄乱了一些东西。

c linux fork
1个回答
0
投票

建议您这样做,将输出通过管道传输到日志文件并查看一下。

#include <unistd.h>
#include <stdio.h>
int main(int argc, char **argv){
  for(int i=0;i<2;i++){
    printf("parentPID:%d: myPID:%d i:%d\n", getppid(), getpid(), i );
    if(fork() | fork()) {
      fork();
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.