【问题标题】:Counting processes after fork in for loop在for循环中计算fork后的进程
【发布时间】:2013-05-14 04:37:44
【问题描述】:

我有以下代码:

for(i=1; i<=2; i++)
{
    fork();
    printf("x ");   
}

我计算出 x 应该打印 6 次:第一次迭代两次,第二次迭代 4 次。

相反,X 被打印了 8 次。为什么?

【问题讨论】:

标签: c linux fork


【解决方案1】:

因为缓冲。通常,stdout 是行缓冲的,所以

printf("x ");

不会立即将"x " 写入终端,而是写入输出缓冲区。这是在进程fork()s 时复制的,因此第二次迭代后的四个进程中的每一个在输出缓冲区中都有两个"x " [一个来自父级/在第一次迭代中分叉之前,一个来自第二次迭代]它退出,总共打印了 8 个 xs。

printf("x "); 之后立即刷新缓冲区,只会打印六个。

【讨论】:

  • fflush(stdout); 是在这里遵循 Daniel 建议的最简单方法。
猜你喜欢
  • 1970-01-01
  • 2012-08-08
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
相关资源
最近更新 更多