जब एक पाइप (नाम या नहीं) या सॉकेट प्रकार 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 त्रुटि पर कार्रवाई करेगी।