프로세스는 독자가없는 파이프 (명명 된) 또는 SOCK_STREAM 유형의 소켓에 쓰려고 시도 할 때 SIGPIPE를 수신합니다.
일반적으로 원하는 행동입니다. 일반적인 예는 다음과 같습니다.
find . | head -n 1
find
일단 head
종료 된 후에는 계속 실행 하고 싶지 않습니다 (그리고 해당 파이프에서 읽기 위해 열린 유일한 파일 설명자를 닫았습니다).
이 yes
명령은 일반적으로 해당 신호를 사용하여 종료됩니다.
yes | some-command
일부 명령이 종료 될 때까지 "y"를 기록합니다.
명령이 종료 될 때뿐만 아니라 모든 독자가 파이프에 대한 읽기 fd를 닫았을 때입니다. 에서:
yes | ( sleep 1; exec <&-; ps -fC yes)
1 2 1 0
서브 쉘이 명시 적으로 stdin을 닫은 후 파이프에서 1 (서브 쉘), 2 (서브 쉘 + 휴면), 1 (서브 쉘), 0 fd 판독 값이 표시되며 yes
SIGPIPE를 수신하게됩니다.
위의 대부분의 쉘은 pipe(2)
while을 ksh93
사용 socketpair(2)
하지만 동작은 동일합니다.
프로세스가 SIGPIPE를 무시하면 쓰기 시스템 호출 (일반적으로 ,, ... 일 write
수 있음 )이 오류 와 함께 리턴됩니다 . 따라서 파손 된 파이프를 수동으로 처리하려는 프로세스는 일반적으로 SIGPIPE를 무시하고 EPIPE 오류에 대한 조치를 수행합니다.pwrite
send
splice
EPIPE