谁能解释为什么这个 fork 执行打印了我文本的 8 倍?

标签 c printf fork

我不明白为什么它会打印 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/

相关文章:

c - 仅使用 C 或 C++ 开发用户界面

c - 为什么在 printf 格式的 "#"之后宽度数字不能工作?

c - 使用 printf 四舍五入到最接近的十

c++ - 过程控制

c++ - Windows 与 fork() 最接近的东西是什么?

c - 如何使用 scanf 来限制用户输入不大于数组的字符串?

c++ - C++中的字符串反转

子进程在父进程之后启动

java - 在 Java 中打印大型列出数组

c - 进程组中的进程是否应该在 Unix/Linux 中与其父进程一起终止?