जब एक पाइप (नाम या नहीं) या सॉकेट प्रकार SOCK_STREAM को लिखने का प्रयास करता है, तो एक SIGPIPE प्राप्त करता है जिसमें कोई पाठक नहीं बचा है।
यह आम तौर पर व्यवहार चाहता है। एक विशिष्ट उदाहरण है:
find . | head -n 1
आप findएक बार headसमाप्त हो जाने के बाद भी चालू नहीं रखना चाहते (और फिर उस पाइप पर पढ़ने के लिए खुला एकमात्र फ़ाइल विवरणक बंद कर दिया)।
yesआदेश आम तौर पर है कि संकेत समाप्त करने के लिए पर निर्भर है।
yes | some-command
"Y" लिखेंगे जब तक कि कुछ-कमांड समाप्त न हो जाए।
ध्यान दें कि यह न केवल जब कमांड से बाहर निकलता है, यह तब होता है जब सभी पाठक ने अपने रीडिंग एफडी को पाइप पर बंद कर दिया है। में:
yes | ( sleep 1; exec <&-; ps -fC yes)
1 2 1 0
1 (उपधारा) होगी, फिर 2 (उपधारा + नींद), फिर 1 (उपधारा) तो 0 fd पाइप से पढ़ने के बाद जब yesउपश्रेणी उसके स्टड को बंद कर देगी , और जब कोई SIGPIPE प्राप्त होगा।
ऊपर, अधिकांश गोले pipe(2)थोड़ी देर के लिए ksh93उपयोग करते हैं socketpair(2), लेकिन व्यवहार उस संबंध में समान है।
एक प्रक्रिया SIGPIPE, लेखन प्रणाली कॉल पर ध्यान नहीं देता है (आम तौर पर writeहै, लेकिन हो सकता है pwrite, send, splice...) एक साथ रिटर्न EPIPEत्रुटि। तो टूटी हुई पाइप को मैन्युअल रूप से संभालने की प्रक्रिया आमतौर पर SIGPIPE को नजरअंदाज करेगी और EPIPE त्रुटि पर कार्रवाई करेगी।