如果我运行这样的bash脚本,并且在脚本中,它将调用一些可执行命令,例如以下
myexec args1 arg2 > out.txt
myexec将通过c API printf打印一些日志信息。如果我中断脚本,因为myexec被某些未知原因卡住了,是否会丢失一些日志信息,而不是保存到out.txt文件中?在我的实验中,我发现它是,但有什么方法可以解决这个问题吗?我不知道为什么日志信息没有刷新到out.txt文件
======
我使用stdbuf解决了我的问题,相关的问题是:Force line-buffering of stdout when piping to tee
答案 0 :(得分:3)
当您中断脚本时,stdout
缓冲区很可能不会被刷新。在您的程序中,在每printf
之后立即添加fflush(stdout)
以刷新缓冲区。或者,在\n
的末尾添加换行符(printf
) - 也会刷新缓冲区(但会在日志输出中添加换行符)。
答案 1 :(得分:1)
您可以指定正确完成程序的信号( SIGUSR1, SIGUSR2
等,但您无法覆盖SIGKILL
)。在信号处理程序中刷新输出流(fflush(stdout)
或替代品)并关闭应用程序。
要停止你的程序类型,如
kill -SIGUSR1
pidof myapp