Suatu proses menerima SIGPIPE ketika mencoba untuk menulis ke pipa (bernama atau tidak) atau soket tipe SOCK_STREAM yang tidak memiliki pembaca tersisa.
Itu umumnya perilaku yang diinginkan. Contoh khas adalah:
find . | head -n 1
Anda tidak ingin findterus berjalan setelah headdiakhiri (dan kemudian tutup satu-satunya deskriptor file yang terbuka untuk dibaca pada pipa itu).
The yesperintah biasanya bergantung pada sinyal untuk mengakhiri.
yes | some-command
Akan menulis "y" sampai beberapa perintah berakhir.
Perhatikan bahwa bukan hanya ketika perintah keluar, itu ketika semua pembaca telah menutup bacaan fd ke pipa. Di:
yes | ( sleep 1; exec <&-; ps -fC yes)
1 2 1 0
Akan ada 1 (subkulit), kemudian 2 (subkulit + tidur), lalu 1 (subkulit) lalu 0 fd membaca dari pipa setelah subkulit secara eksplisit menutup stdinnya, dan saat itulah yesakan menerima SIGPIPE.
Di atas, sebagian besar cangkang menggunakan pipe(2)sementara ksh93menggunakan a socketpair(2), tetapi perilakunya sama dalam hal itu.
Ketika proses mengabaikan SIGPIPE, panggilan sistem penulisan (umumnya write, tapi bisa pwrite, send, splice...) kembali dengan EPIPEkesalahan. Jadi proses yang ingin menangani pipa yang rusak secara manual biasanya akan mengabaikan SIGPIPE dan mengambil tindakan atas kesalahan EPIPE.