use*_*360 1 linux socket docker
当我看到一个write: broken pipe
流程的一堆错误时,这意味着什么?
level=error msg="attach: stdout: write unix /var/run/docker.sock->@: write: broken pipe"
这是否意味着这个进程需要更多的文件描述符?或任何其他资源?我应该怎么看?
这意味着有人已经设置了信号处理程序SIGPIPE
,以SIG_IGN
(忽略),错误(试图写与不阅读器管)通过的退出状态,而不是报道write(2)
。
在您的情况下,Unix 套接字另一端的程序很可能崩溃或意外退出。我会先研究一下。
这可能是一些复杂的攻击——许多写得很糟糕的程序不期望错误write(2)
并且不检查其返回值。
由于 a 退出的进程SIGPIPE
没什么特别的,这就是事情应该如何工作。这就是command | head -5
工作原理;如果command
在head -5
退出后仍想将内容写入管道,它将收到一个SIGPIPE
,并且一切都会很好地终止。但是,如果命令安装了信号处理程序SIGPIPE
,或者如果调用Shell已设置trap '' PIPE
(这将导致自身和孩子忽略SIGPIPE
信号),任何write(2)
进入管会返回-1
与errno
设置为EPIPE
(“破管道”)。在这方面,套接字与管道的工作方式相同。