सबसे पहले, यह बैश करने के लिए विशिष्ट नहीं है। 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
या शेल बिलिन? यदि उत्तरार्द्ध, मैं अनुमान लगा रहा हूं कि शेल अपने बिलिन के साथ खुद को नहीं मारेगा।