मैं इसे एक उत्तर के रूप में पोस्ट करूंगा ताकि किसी प्रकार का संकल्प हो अगर यह मुद्दा निकला।
0 से बाहर निकलने की स्थिति का मतलब एक सफल कार्यक्रम से एक सामान्य निकास है। एक बाहर निकलने का कार्यक्रम 0 और 255 के बीच के किसी भी पूर्णांक को अपनी निकास स्थिति के रूप में चुन सकता है। परंपरागत रूप से, कार्यक्रम छोटे मूल्यों का उपयोग करते हैं। 126 और ऊपर के मानों का उपयोग शेल द्वारा विशेष स्थितियों की रिपोर्ट करने के लिए किया जाता है, इसलिए उनसे बचना सबसे अच्छा है।
C API स्तर पर, प्रोग्राम 16-बिट स्थिति की रिपोर्ट करते हैं , जो प्रोग्राम के बाहर निकलने की स्थिति और सिग्नल को एन्कोड करता है जो इसे मारता है, यदि कोई हो।
शेल में, एक कमांड की निकास स्थिति (सहेजी गई $?
) प्रोग्राम की वास्तविक निकास स्थिति और सिग्नल मूल्य का पता लगाती है: यदि किसी प्रोग्राम को सिग्नल द्वारा मार दिया जाता है, तो $?
यह 128 से अधिक मूल्य पर सेट होता है (अधिकांश शेल के साथ, यह मान है) 128 प्लस सिग्नल नंबर; एटीटी ksh 256 + सिग्नल नंबर का उपयोग करता है और यश 384 + सिग्नल नंबर का उपयोग करता है, जो अस्पष्टता से बचा जाता है, लेकिन अन्य गोले ने सूट का पालन नहीं किया है)।
विशेष रूप से, यदि $?
0 है, तो आपका प्रोग्राम सामान्य रूप से बाहर निकलता है।
ध्यान दें कि इसमें एक प्रक्रिया का मामला शामिल है जो SIGTERM को प्राप्त करता है, लेकिन इसके लिए एक सिग्नल हैंडलर है, और अंततः सामान्य रूप से बाहर निकलता है (शायद SIGTERM सिग्नल के अप्रत्यक्ष परिणाम के रूप में, शायद नहीं)।
आपके शीर्षक में प्रश्न का उत्तर देने के लिए, सिस्टरम को सिस्टम द्वारा कभी भी स्वचालित रूप से नहीं भेजा जाता है। कुछ संकेत ऐसे होते हैं जो किसी टर्मिनल के चले जाने पर स्वचालित रूप से SIGHUP की तरह भेजे जाते हैं, SIGSEGV / SIGBUS / SIGILL जब कोई प्रक्रिया ऐसी चीजें करती है जो उसे नहीं करनी चाहिए, तब SIGPIPE जब यह टूटी हुई पाइप / सॉकेट, इत्यादि को लिखता है और वहाँ हैं कुछ संकेतों को एक टर्मिनल में एक प्रमुख प्रेस के कारण भेजा जाता है, मुख्य रूप से SIGINT for Ctrl+ C, SIGQUIT for Ctrl+ \और SIGTSTP Ctrl+ के लिए Z, लेकिन SIGTERM उनमें से एक नहीं है। यदि कोई प्रक्रिया SIGTERM प्राप्त करती है, तो कुछ अन्य प्रक्रिया ने वह संकेत भेजा है।
¹ मोटे तौर पर बोल