当我看到进程出现一堆“写入:损坏的管道”错误时,这意味着什么?

当我看到进程出现一堆“写入:损坏的管道”错误时,这意味着什么?

当我看到某个流程出现一堆write: broken pipe错误时,这意味着什么?

level=error msg="attach: stdout: write unix /var/run/docker.sock->@: write: broken pipe"

这是否意味着该进程需要更多文件描述符?或任何其他资源?我应该看哪条路?

答案1

这意味着有人已将信号处理程序设置为SIGPIPEto SIG_IGN(忽略),并且错误(尝试写入没有读取器的管道)而是通过 的退出状态报告write(2)

在您的情况下,Unix 套接字另一端的程序很可能崩溃或意外退出。我会先研究一下。

或许一些复杂的攻击——许多写得很糟糕的程序不会预期错误write(2),也不检查其返回值。

由于 a 而退出的进程SIGPIPE没有什么特别的,这就是事情应该如何进行的。这就是command | head -5工作原理;如果退出command后仍想向管道写入内容,它将收到一个,一切都会正常终止。但是,如果 command 安装了一个信号处理程序,或者如果调用 shell 设置了 a (这将导致其自身及其子进程忽略该信号),则任何进入管道的内容都将返回并设置为(“损坏的管道”)。在这方面,套接字的工作方式与管道相同。head -5SIGPIPESIGPIPEtrap '' PIPESIGPIPEwrite(2)-1errnoEPIPE

相关内容