इस स्थिति में "टूटा हुआ पाइप" देखना दुर्लभ है, लेकिन सामान्य है।
जब आप चलाते हैं type rvm | head -1
, तो बैश type rvm
एक प्रक्रिया में, head -1
दूसरे में निष्पादित होता है । 1 स्टडआउट type
एक पाइप के "राइट" छोर से जुड़ा हुआ है , head
"रीड" एंड का स्टड है । दोनों प्रक्रियाएं एक ही समय में चलती हैं।
head -1
प्रक्रिया stdin से (आम तौर पर 8 kB की मात्रा में) डेटा, (के अनुसार एक ही पंक्ति बाहर प्रिंट पढ़ता -1
विकल्प), और बाहर निकलता है, जिससे पाइप के "पढ़ें" अंत को बंद करना पड़ा। चूंकि rvm
फ़ंक्शन काफी लंबा है (बैश द्वारा पार्स और पुनर्निर्मित किए जाने के बाद लगभग 11 केबी), इसका मतलब यह है कि head
बाहर निकलता है जबकि type
अभी भी कुछ केबी को बाहर लिखने के लिए डेटा है।
इस बिंदु पर, चूंकि type
एक पाइप को लिखने की कोशिश की जा रही है , जिसका दूसरा छोर बंद हो गया है - एक टूटी हुई पाइप - यह () फ़ंक्शन को शांत करता है जो ईपीआईपीई त्रुटि लौटाएगा, जिसका अनुवाद "ब्रोकन पाइप" के रूप में किया जाएगा। इस त्रुटि के अलावा, कर्नेल SIGPIPE सिग्नल को भी भेजता है type
, जो डिफ़ॉल्ट रूप से प्रक्रिया को तुरंत मारता है।
(संवादात्मक गोले में संकेत बहुत उपयोगी है, क्योंकि अधिकांश उपयोगकर्ता नहीं चाहते हैं कि पहली प्रक्रिया चलती रहे और कहीं भी लिखने की कोशिश न करें। इस बीच, गैर-संवादात्मक सेवाएं SIGPIPE को अनदेखा करती हैं - यह लंबे समय तक चलने वाले डेमॉन के लिए अच्छा नहीं होगा। इतनी सरल त्रुटि पर मरना - तो वे त्रुटि कोड को बहुत उपयोगी पाते हैं।)
हालांकि, सिग्नल डिलीवरी 100% तत्काल नहीं है, और ऐसे मामले भी हो सकते हैं जहां ईपीआईपीई लिखते हैं और सिग्नल प्राप्त करने से पहले थोड़ी देर के लिए प्रक्रिया जारी रहती है। इस मामले में, type
असफल लेखन को नोटिस करने के लिए पर्याप्त समय मिलता है, त्रुटि कोड का अनुवाद करें और यहां तक कि एसआईजीपीआईपीई द्वारा मारे जाने से पहले एक त्रुटि संदेश भी स्टेंडर को प्रिंट करें। (त्रुटि संदेश "-बैश: प्रकार:" कहता है, क्योंकि type
अपने आप ही बाश का एक अंतर्निहित कमांड है।)
मल्टी-सीपीयू सिस्टम पर यह अधिक सामान्य प्रतीत होता है, क्योंकि type
प्रक्रिया और कर्नेल का सिग्नल डिलीवरी कोड अलग-अलग कोर पर, शाब्दिक रूप से एक ही समय में चल सकता है।
type
जब यह राइट () फ़ंक्शन से ईपीआईपीई प्राप्त करता है, तो इस संदेश को बिलिन (बैश के स्रोत कोड) में तुरंत पैच करके निकालना संभव होगा ।
हालाँकि, इसके बारे में चिंतित होने के लिए कुछ भी नहीं है, और यह rvm
किसी भी तरह से आपकी स्थापना से संबंधित नहीं है ।