프로세스에 대해 "쓰기: 깨진 파이프" 오류가 여러 개 표시되는 것은 무엇을 의미합니까?

프로세스에 대해 "쓰기: 깨진 파이프" 오류가 여러 개 표시되는 것은 무엇을 의미합니까?

write: broken pipe프로세스에 오류가 많다는 것은 무엇을 의미하나요?

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

이는 프로세스에 더 많은 파일 설명자가 필요하다는 의미입니까? 아니면 다른 자원이 있나요? 어느 쪽으로 봐야 할까요?

답변1

이는 누군가 신호 처리기를 SIGPIPE( SIG_IGN무시)로 설정했으며 오류(리더가 없는 파이프에 쓰려고 시도함)가 대신 종료 상태를 통해 보고된다는 의미입니다 write(2).

귀하의 경우 Unix 소켓의 다른 쪽 끝에 있는 프로그램이 예기치 않게 충돌하거나 종료되었을 가능성이 높습니다. 먼저 살펴보겠습니다.

그것아마도일부 정교한 공격 - 잘못 작성된 많은 프로그램은 오류를 예상하지 않고 write(2)반환 값을 확인하지 않습니다.

로 인해 종료되는 프로세스 SIGPIPE에는 특별한 것이 없으며 이것이 작동하는 방식입니다. 이것이 command | head -5작동하는 방식입니다. command종료 후에도 파이프에 계속 쓰고 싶다면 파이프가 수신되고 모든 것이 정상적으로 종료됩니다. 그러나 명령이 신호 처리기를 설치하거나 호출 쉘이 a를 설정하면(이로 인해 자체 및 하위 프로세스가 신호를 무시하게 됨) 파이프로 들어가는 모든 항목이 반환되고 ("깨진 파이프")로 설정됩니다. 이 점에서 소켓은 파이프와 동일하게 작동합니다.head -5SIGPIPESIGPIPEtrap '' PIPESIGPIPEwrite(2)-1errnoEPIPE

관련 정보