Quando vejo um monte de erros 'write: broken pipe' para um processo, o que isso significa?

1

Quando vejo um monte de write: broken pipe de erros em um processo, o que isso significa?

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

Isso significa que esse processo precisa de mais descritores de arquivos? ou qualquer outro recurso? qual caminho devo estar olhando?

    
por user2062360 16.11.2018 / 22:25

1 resposta

3

Isso significa que alguém configurou o manipulador de sinal para SIGPIPE para SIG_IGN (ignore) e o erro (tentando gravar em um canal sem leitor) é relatado pelo status de saída de write (2) .

No seu caso, o programa na outra extremidade do socket Unix provavelmente está falhando ou saindo inesperadamente. Eu vou olhar primeiro para isso.

pode ser algum ataque sofisticado - muitos programas mal escritos não esperam erros de gravação (2) e não verificam seu valor de retorno.

Um processo que sai por causa de um SIGPIPE não é nada especial, e é assim que as coisas devem funcionar. É assim que command | head -5 funciona; Se command ainda quiser gravar coisas no pipeline depois que head -5 tenha saído, ele receberá um SIGPIPE , e tudo terminará bem. Mas se o comando instalar um manipulador de sinal para SIGPIPE ou se o shell de chamada tiver definido um trap '' PIPE (que fará com que ele e seus filhos ignorem o sinal SIGPIPE ), qualquer gravação (2) no canal retornará -1 com errno definido como EPIPE ("canal quebrado"). E os soquetes funcionam da mesma forma que os canos a esse respeito.

    
por 16.11.2018 / 23:25