考虑代码:
printf '%s\n' 1 2 3 4 5 | head -n 2
其输出为:
1
2
我的理解是,当head
进程在读取前两行后破坏管道时,该printf
进程会捕获损坏的管道并优雅退出。
在我的一个脚本中,我使用一个 python 应用程序,它不会在损坏的管道上正常退出,而是继续运行,直到它终止完成它设定的操作或由于某些其他原因终止。每次它尝试写入标准输出并失败时,它都会抱怨broken pipe
.
本文介绍了如何在 python 中处理损坏的管道。
我也许可以鼓励应用程序开发人员实现对破损管道的处理。出于某些原因,我怀疑他们会这样做。我也许可以分叉该应用程序,但它相当复杂,所以不愿意。
我似乎剩下的唯一选择是试图找到一种方法,让 shell (Bash) 在尝试写入管道时杀死进程。这可能吗?如果是这样,我该怎么做?