繁体   English   中英

中断linux命令重定向会丢失数据吗?

[英]interrupt linux command redirection can loss data?

如果我运行这样的bash脚本,并且在该脚本中,它将调用一些可执行命令,如下所示

myexec args1 arg2 > out.txt

myexec将通过c API printf打印一些日志信息。 如果我中断脚本,因为myexec由于某些未知原因而卡住,是否会丢失某些日志信息,而不将其保存到out.txt文件中? 在我的实验中,我发现是的,但是有什么方法可以解决这个问题? 而且我不知道为什么日志信息没有刷新到ou​​t.txt文件

========

我使用stdbuf解决了我的问题,相关的问题是: 管道到tee时强制对stdout进行行缓冲

当您中断脚本时,很有可能不会刷新stdout缓冲区。 在您的程序中,在每个printf之后立即添加fflush(stdout)以刷新缓冲区。 或者,在printf的末尾添加换行符( \\n )-也会刷新缓冲区(但会在日志输出中添加换行符)。

您可以指定可以正确完成程序的信号( SIGUSR1, SIGUSR2等,尽管不能覆盖SIGKILL )。 在信号处理程序中,刷新输出流( fflush(stdout)或替代项)并关闭应用程序。 要停止您的程序,请输入如下

杀死pidof myapp -SIGUSR1 pid

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM