On Wed, Sep 27, 2017 at 04:31:37AM -0700, Stduolc X wrote:
>
https://gist.github.com/stduolc/19b0efd0f794ff62ee9b1b05de5b9841/revisions
>
> 这个代码.子进程应该在收到SIGPIPE的时候直接退出了.但是结果他一直活着的.然后把磁盘IO吃了好多.咋搞啊?
你的 tail 版本是多少?我这里测试结果是:Python 3 正常结束。Python
2 下 tail 会报错,写 stderr 失败(EPIPE),然后继续报错,还是写失败,然
后不管了直接退出。
因为在 initsigs 函数中,Python 忽略了 SIGPIPE 等几个信号。Python
2 的 subprocess 没有处理,忽略行为被继承了;Python 3 的 subprocess
有 restore_signals 并默认为 True,恢复了那些信号的默认行为。
我的 tail 是 GNU coreutils 8.28 的。
话说要不上 Python 3 吧?Salt 已经支持 Python 3 了哦~
--
Best regards,
lilydjwg
Linux Vim Python 我的博客:
https://blog.lilydjwg.me/
--
A: Because it obfuscates the reading.
Q: Why is top posting so bad?