我不明白为什么它会打印 8 倍的文本。在我的构想中,它应该只打印 2 次。 谁能帮帮我?
代码:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
pid_t x=0;
pid_t y=0;
x=fork();
if(y>0)
fork();
if(x==0)
y=fork();
fork();
if(y==0){
fork();
printf("Some text\n");
}
}
最佳答案
x = fork();
被执行,2 个进程正在运行。
if (y>0) fork();
永远不会被执行。
if (x==0) y=fork();
将由子进程执行,所以现在有 3 个进程在运行。对于初始父 y
仍然是 0
。对于 child ,它是 y == child_child 的 pid
,对于 child 的 child ,它是 y==0
。
所有 3 个进程都将执行 fork()
,所以总共有 6 个进程,其中 4 个进程的内存中有 y==0
。
这 4 个进程再次 fork,所以有 8 个进程,它们执行 printf(...);
关于谁能解释为什么这个 fork 执行打印了我文本的 8 倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41970272/