【问题标题】:fork() command in c -- what is the output to this simple piece of code? [duplicate]c 中的 fork() 命令——这段简单代码的输出是什么? [复制]
【发布时间】:2012-03-19 20:23:38
【问题描述】:

可能重复:
Unix fork() system call what runs when?

我在Wikipedia上看,文章说,“fork()系统调用的目的是创建一个新进程,它成为调用者的子进程,之后,父进程和子进程,将执行fork()系统调用之后的代码。因此,区分父进程和子进程很重要。这可以通过测试fork()系统调用的返回值来完成。"

那么,这段代码执行了什么:

printf("This is a fork!");
fork();

根据描述,它看起来会说“这是一个叉子!”只有一次,因为在 fork() 语句之后什么都没有。然而,当我在一个 linux 机器上测试它时,它打印出“这是一个叉子!”两次。那么是哪一个呢?

谢谢。

【问题讨论】:

    标签: c++ c process fork


    【解决方案1】:

    printf 的输出被缓冲;两个子进程都获得了缓冲区的副本;每个子进程退出时缓冲区被刷新两次。

    【讨论】:

      【解决方案2】:

      printf 已缓冲其输出以供以后显示。后来恰好出现在fork 之后,所以你会看到它两次。

      将您的代码片段替换为:

      printf("...");
      fflush(stdout);
      fork();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-19
        • 2015-09-24
        • 1970-01-01
        相关资源
        最近更新 更多