जब आप किसी टर्मिनल को बंद करते हैं तो टर्मिनल शेल को एक सिग्नल सिग्नल भेजता है; शेल, बदले में, अपने सभी बच्चों के प्रक्रिया समूहों को एक साइट सिग्नल भेजता है, जिसमें पृष्ठभूमि वाले प्रक्रिया समूह शामिल होते हैं;
प्रत्येक एकल प्रक्रिया सिग्नल पर कैसे प्रतिक्रिया करेगी, यह पूरी तरह से प्रक्रिया पर निर्भर करता है: यदि प्रक्रिया सिग्नल के लिए एक हैंडलर को परिभाषित नहीं करती है और कर्नेल को बताती है (कुछ syscall जैसे signal()
या sigaction()
) कि इसे संभालना चाहता है, तो कर्नेल निष्पादित होता है सिग्नल के लिए डिफ़ॉल्ट हैंडलर, जो SIGHUP सिग्नल के मामले में प्रक्रिया को समाप्त करने में शामिल है।
हालाँकि, जब आप एक कमांड चलाते हैं sudo
, तो sudo
प्रक्रिया का UID और इसकी चाइल्ड प्रोसेस 0
(रूट) पर सेट हो जाता है ; सामान्य तौर पर, जब तक संकेत भेजने वाली प्रक्रिया का यूआईडी 0
(रूट) या लक्ष्य प्रक्रिया के समान नहीं होता है, कर्नेल सिग्नल को खारिज कर देता है (यानी: एक प्रक्रिया किसी अन्य उपयोगकर्ता के स्वामित्व वाली प्रक्रिया को संकेत नहीं भेज सकती, जब तक कि प्रक्रिया नहीं हो। संकेत भेजना रूट के स्वामित्व में है); इसीलिए टर्मिनल द्वारा चलाए जा रहे बैश इंस्टेंस जैसे यूजर-रन की प्रक्रिया एक sudo
प्रक्रिया को भी बंद नहीं कर सकती है और आखिरकार, टर्मिनल को बंद करने से शुरू होने वाली प्रक्रिया प्रभावित नहीं होती है sudo
।