printf有缓存| stderr无缓存导致日志乱序

原因:stdout 和 stderr 的缓冲模式不同
-
stdout(printf)的缓冲行为:
默认情况下:
如果输出到 终端(TTY),stdout 是 行缓冲(line-buffered),遇到 \n 会立即刷新。
如果重定向到 文件(如 >> $logfile 2>&1 & 重定向到文件),stdout 会变为 全缓冲(fully-buffered),默认缓冲区大小(通常 4KB 或 8KB),直到缓冲区满或程序退出才会刷新。 -
stderr(fprintf(stderr))的缓冲行为:
无缓冲(unbuffered):无论输出到终端还是文件,stderr 会立即写入,不受缓冲区影响
解决



浙公网安备 33010602011771号