我知道fork()
会创建一个孩子,而for loop
会为每个孩子重复fork()
。但我不知道为什么我会让7个孩子的过程重复3次。
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
int i;
printf("Process PID %6d \t PPID %6d \n",
getpid(), getppid());
for (i = 0; i<3; ++i)
{
if (fork()==0)
printf("Process PID %6d \t PPID %6d \n", getpid(), getppid());
}
return 0;
}
任何人都可以解释这个编码
答案 0 :(得分:8)
让我画一个树形图。
parent i=0
fork() -------------------------------------v
parent i=1 child1 i=1
fork() ---------------v fork() ---------------v
parent i=2 child2 i=2 child1 i=2 child2 i=2
fork() ----v fork() ----v fork() ----v fork() ----v
parent i=3 child3 i=3 child2 i=3 child3 i=3 child1 i=3 child3 i=3 child2 i=3 child3 i=3
1 2 3 4 5 6 7
因此创造了7个孩子。
答案 1 :(得分:3)
让我们来看看这些步骤: (请注意,步骤的顺序不是一成不变的(孩子可以在父亲再次分叉之前进行分叉),但这并没有改变因果关系,所以我只假设一个任意顺序,使其更容易解释)
总共有八个进程,其中七个是孩子,其中四个根本没有分叉。
答案 2 :(得分:0)
非常简化:
其中=>
表示fork
。
parent => (child-1), (child-2), (child-3)
child-1 => (child-11), (child-12)
child-11 => (child-111)
child-2 => (child-21)