सबसे पहले, यह बैश करने के लिए विशिष्ट नहीं है। ATT ksh, डैश और zsh समान व्यवहार करते हैं: वे कमांड लाइन संस्करण के दौरान SIGTERM और SIGQUIT को अनदेखा करते हैं; mksh के रूप में, यह भी नहीं छोड़ता है लेकिन उन्हें SIGINT की तरह व्यवहार करता है।
दोनों ksh मैनुअल और बैश मैनुअल इन शब्दों में SIGTERM की अनदेखी को सही ठहराते हैं:
ताकि kill 0एक इंटरेक्टिव शेल न मारें
kill 0प्रक्रिया समूह में सभी प्रक्रियाओं को मारता है कि शेल in the है। संक्षेप में, प्रक्रिया समूह में टर्मिनल पर अग्रभूमि में चलने वाली सभी प्रक्रियाएँ होती हैं, या सभी प्रक्रियाएँ पृष्ठभूमि या निलंबित कार्य में होती हैं।
अधिक सटीक रूप से, नौकरी के नियंत्रण के साथ आधुनिक गोले में यही होता है । इस तरह के गोले kill 0उपयोगी नहीं होंगे, क्योंकि शेल अपने स्वयं के प्रक्रिया समूह में होगा। पुराने गोले (या आधुनिक गोले के बाद set +m) ने पृष्ठभूमि आदेशों के लिए प्रक्रिया समूह नहीं बनाए। तो आप kill 0लॉग आउट किए बिना सभी पृष्ठभूमि आदेशों को मारने के लिए कमांड का उपयोग कर सकते हैं। इस प्रकार kill 0औचित्य एक पुराने जैसा दिखता है जो आजकल उचित नहीं है लेकिन पिछड़े संगतता के लिए रखा गया है।
हालांकि ऐसी ही अन्य स्थितियां भी हैं जहां शेल इम्यून को उपयोगी बनाता है। उस मामले पर विचार करें जहां आपके पास एक टर्मिनल को हॉगिंग करने की प्रक्रिया है और आप लॉग आउट किए बिना उन्हें मारना चाहते हैं। कई प्रणालियों में एक उपकरण होता है, pkillजो आपको टर्मिनल पर चलने वाली प्रक्रियाओं को मारने देता है। आप मौजूदा टर्मिनल पर चलने वाली सभी प्रक्रियाओं को चलाने pkill -t $TTYया pkill -QUIT -t $TTYमारने के लिए खोल को छोड़कर, जो सिग्नल की अनदेखी करते हैं।
एक शेल आम तौर पर या तो तब चला जाता है जब उपयोगकर्ता इसे बाहर निकालता है (जैसे exitया जैसे कमांड के साथ logout), या जब इसका टर्मिनल इनपुट के अंत का संकेत देता है (उपयोगकर्ता Ctrl+ दबाकर इसका कारण बन सकता है D) या पूरी तरह से चला जाता है। इस अंतिम स्थिति में, शेल सिग्नल SIGHUP प्राप्त करता है, और यह उस एक को अनदेखा नहीं करता है।
एक्स सत्र से लॉग आउट करने के आपके उपयोग के मामले के kill -15 -1लिए, यह करेगा, क्योंकि यह टर्मिनल एमुलेटर को मारता है जो शेल को राइट्स प्राप्त करने का कारण बनता है। यह वास्तव में एक्स सर्वर को मारने के लिए पर्याप्त है, लेकिन इसकी प्रक्रिया आईडी खोजने की आवश्यकता है। यदि आप पाठ सत्र पर काम करने के लिए समान कमांड चाहते हैं, तो आप उपयोग कर सकते हैं kill -15 -1; exit। यह वैसे भी अपनी उंगलियों पर होने के लिए काफी खतरनाक आदेश है।
¹ यह एक नियम के रूप में शेल मैनुअल में उल्लिखित नहीं लगता है; यह अंतर्निहित सिस्टम कॉल की एक विशेषता है। यह स्पष्ट रूप से POSIX विनिर्देशन में उल्लिखित है ।
To आजकल, ऐसा करने के लिए, jobs -lउनके प्रक्रिया समूह आईडी के साथ नौकरियों की सूची देखने के लिए दौड़ें , फिर kill -123 -456 …प्रक्रिया समूहों को मारने के लिए।
/bin/killया शेल बिलिन? यदि उत्तरार्द्ध, मैं अनुमान लगा रहा हूं कि शेल अपने बिलिन के साथ खुद को नहीं मारेगा।