निम्नलिखित मुख्य रूप से CLIs के रूप में कार्य करने के लिए डिज़ाइन रूबी लिपियों के लिए लागू होता है; SIGPIPE
प्राप्त करते समय आमतौर पर सीएलआई को को एक विशिष्ट निकास कोड के साथ चुपचाप समाप्त करने की आवश्यकता होती है; उन स्क्रिप्ट्स के लिए जिन्हें SIGPIPE
के केस-बाय-केस हैंडलिंग की आवश्यकता होती है, donovan.lampa's helpful answer पर विचार करें।
की मदद के लिए wallyk's helpful answer और tokland's helpful answer:
यदि आप चाहते हैं प्रदर्शनी सिस्टम के डिफ़ॉल्ट व्यवहार को अपनी स्क्रिप्ट, अधिकांश यूनिक्स उपयोगिताओं (जैसे, cat
) करते हैं, का उपयोग
Signal.trap("SIGPIPE", "SYSTEM_DEFAULT")
के रूप में आपकी स्क्रिप्ट की शुरुआत में
।
अब, जब अपनी स्क्रिप्ट SIGPIPE
संकेत प्राप्त (यूनिक्स सिस्टम पर), सिस्टम के डिफ़ॉल्ट व्यवहार होगा:
- चुपचाप समाप्त अपनी स्क्रिप्ट
- रिपोर्ट बाहर निकलें कोड
141
(जो 128
के रूप में गणना की जाती है (सिग्नल द्वारा समाप्ति का संकेत) + 13
(SIGPIPE
की संख्या))
इसके विपरीत, Signal.trap("PIPE", "EXIT")
निकास कोड 0
की रिपोर्ट करेगा।
ध्यान दें कि एक खोल संदर्भ में बाहर निकलने के कोड बार नहीं एक कमांड जैसे ruby examble.rb | head
में स्पष्ट, कारण है कि शेल (डिफ़ॉल्ट रूप से) केवल पिछले आदेश के बाहर निकलने के कोड की रिपोर्ट।
bash
में, आप पाइप लाइन में सभी आदेशों के निकास कोड को देखने के लिए ${PIPESTATUS[@]}
जांच कर सकते हैं।
असल में, यह कोड सभी http अनुरोध के लिए है। क्या इसका मतलब यह है कि उस बिंदु पर सर्वर कनेक्ट नहीं है? ऐसा लगता है कि यह यादृच्छिक रूप से हो रहा है। – sepiroth
मुझे रूबी के बारे में बहुत कुछ पता नहीं है, लेकिन ईपीआईपीई शायद नेटवर्क डिस्कनेक्शन हो सकता है। लिनक्स पर मैं उम्मीद करता हूं कि त्रुटि उस स्थिति के लिए ENETRESET, ECONNABORTED, ECONNRESET, ENOTCONN, या ESHUTDOWN होगी। – wallyk
@ प्रेरणा: 'EPIPE' _system_- परिभाषित है; यह एक सिस्टम कॉल द्वारा रिपोर्ट किया गया निकास कोड है जो 'सिगिपी' सिग्नल को ट्रिगर करता है, जो आम तौर पर इंगित करता है कि _pipe_ के _reading_ अंत में प्रक्रिया समाप्त हो गई है (जबकि _writing_ end अभी भी पाइप पर लिखने की कोशिश कर रहा है); इसके अतिरिक्त, _network_ संदर्भ में, [यह] (https://www.gnu.org/software/libc/manual/html_mono/libc.html#Operation- त्रुटि- सिग्नल) कहता है: "सिगिपी 'का एक अन्य कारण है जब आप एक _socket_ पर आउटपुट करने का प्रयास करते हैं जो कनेक्ट नहीं है। [डेटा भेजना] देखें (https://www.gnu.org/software/libc/manual/html_mono/libc.html#Sending-Data) "। – mklement0