You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么删除父进程printf的换行符后子进程输出先于父进程显示?

该现象的核心原因是C标准库的标准输出缓冲机制和进程执行时序共同作用的结果
  • 首先明确默认规则:当标准输出连接到终端时,C标准库采用行缓冲策略,满足以下任意条件才会将缓冲区内容输出到终端:
    1. 缓冲区内容遇到换行符\n
    2. 缓冲区被写满
    3. 进程主动调用fflush(stdout)刷新缓冲区
    4. 进程正常退出时自动刷新所有缓冲区
  • 原有带\n的代码执行逻辑:
    父进程执行printf时遇到\n,直接将Parent: (PID 1234)刷新输出到终端,随后调用wait(NULL)阻塞等待子进程运行结束。子进程后续执行自己的printf,子进程退出时自动刷新缓冲区输出child: 1235,因此输出顺序和预期一致。
  • 删除\n后的执行逻辑:
    父进程执行不带\n的printf时,内容仅暂存在父进程的标准输出缓冲区中,不会立刻输出到终端,之后父进程进入wait阻塞状态,子进程先运行:子进程执行自己的printf后退出,退出时自动刷新自身缓冲区输出child: 1235;子进程结束后父进程从wait返回,继续运行直到自身退出,退出时才会刷新自己的缓冲区,输出之前暂存的Parent: (PID 1234),因此最终输出是两段内容拼接在一起的效果。

内容的提问来源于stack exchange,提问作者YZY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:15:03