项目背景:linux 编程监控程序运行状态,打印消息到日志,fork一个子进程运行主要任务,主进程监控子进程异常信号。
问题现象:程序刚运行,fork子进程后发现 fork之前printf/fprintf的消息 实际printf/fprintf两遍。
问题分析:printf/fprintf 不会立刻打印到终端或写到磁盘上,而是写到缓冲区里面。
fork会拷贝主进程的资源,包括缓冲区消息,所以当缓冲区长度满足条件打印到终端时,子进程会把fork之前的消息再次打印一遍。
解决措施:fork之前,使用fflush函数更新缓冲区内容到终端。