c - 为什么这个 fork() 输出产生 8 而不是 5?

标签 c linux fork

所以我必须找到使用 fork() 方法的代码的输出。我以为输出是 5 个“hello”,但实际上我得到了 8 个。这是为什么呢?这是代码:

#include "csapp.h"

void doit()
{
    Fork();
    Fork();
    printf("hello\n");
    return;
}

int main()
{
    doit();
    printf("hello\n");
    exit(0);
}

最佳答案

这是您的代码正在执行的操作:

main->doit()->Fork()->Fork()->printf()->return->printf()->exit()
                |       |
                |       ----->printf()->return->printf()->exit()
                |
                ----->Fork()->printf()->return->printf()->exit()
                        |
                        ----->printf()->return->printf()->exit()

如您所见,总共调用了 8 次 printf()

如果您选择在 maindoit 函数中打印不同的字符串,您会更容易看到发生了什么。

在每个 printf() 调用上设置断点是解决此类问题的另一种有效策略。

关于c - 为什么这个 fork() 输出产生 8 而不是 5?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32727168/

相关文章:

c - C语言中如何用fork()终止多个进程?

Java - C-Like Fork?

c - 为什么 C/RUST 中的一个加法运算在结果 ASM 中有 3 个 double 浮点加法工具?

c - 我的 switch 语句没有从 ​​for 循环中获取值

python - 为什么在使用命令行设置本地时间时使用 timedatectl 设置 UTC 时间从 python 设置时间?

Android - Fedora - 安装 32 位软件包

android - 使用 JGIT 克隆 list 文件

c - Fgets() 不断跳过第一个字符

c++ - 用户空间中的 Linux C/C++ 计时器信号处理程序

c - 叔叔和侄子之间的管道