当我看到一堆进程的 `write:broken pipe` 错误是什么意思?

use*_*360 1 linux socket docker

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

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

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

mos*_*svy 5

这意味着有人已经设置了信号处理程序SIGPIPE,以SIG_IGN(忽略),错误(试图写与不阅读器管)通过的退出状态,而不是报道write(2)

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

可能是一些复杂的攻击——许多写得很糟糕的程序不期望错误write(2)并且不检查其返回值。

由于 a 退出的进程SIGPIPE没什么特别的,这就是事情应该如何工作。这就是command | head -5工作原理;如果commandhead -5退出后仍想将内容写入管道,它将收到一个SIGPIPE,并且一切都会很好地终止。但是,如果命令安装了信号处理程序SIGPIPE,或者如果调用Shell已设置trap '' PIPE(这将导致自身和孩子忽略SIGPIPE信号),任何write(2)进入管会返回-1errno设置为EPIPE(“破管道”)。在这方面,套接字与管道的工作方式相同。

  • 永远不要归因于恶意... (2认同)