सिग्नल डिफ़ॉल्ट रूप से गिरी द्वारा नियंत्रित किया जाता है। ओल्ड यूनिक्स सिस्टम में 15 सिग्नल थे; अब उनके पास और अधिक है। आप </usr/include/signal.h>
(या kill -l) देख सकते हैं। CTRL + सी नाम SIGINT
नाम के साथ संकेत है।
प्रत्येक सिग्नल को संभालने के लिए डिफ़ॉल्ट कार्रवाई को भी कर्नेल में परिभाषित किया गया है, और आमतौर पर यह सिग्नल प्राप्त करने वाली प्रक्रिया को समाप्त करता है।
सभी सिग्नल (लेकिन SIGKILL
) प्रोग्राम द्वारा प्रबंधित किए जा सकते हैं।
और यही खोल करता है:
- खोल चल इंटरैक्टिव मोड में, यह एक विशेष संकेत इस विधा के लिए से निपटने है जब।
- आप, खोल उदाहरण
find
के लिए एक कार्यक्रम चलाते हैं,:
fork
रों ही
- और बच्चे के लिए डिफ़ॉल्ट संकेत से निपटने
- दिया कमांड के साथ बच्चे की जगह सेट (उदाहरण के लिए खोज के साथ)
- आप जब प्रेस CTRL + सी, माता पिता खोल इस संकेत को संभालने लेकिन बच्चे इसे प्राप्त होगा - डिफ़ॉल्ट कार्रवाई के साथ - समाप्त। (बच्चे संकेत हैंडलिंग भी लागू कर सकते हैं)
आप कर सकते हैं अपने खोल स्क्रिप्ट भी में trap
संकेत ...
और तुम संकेत भी अपने इंटरैक्टिव खोल के लिए से निपटने के सेट कर सकते हैं, पर यह दर्ज कोशिश आप के शीर्ष ~/.profile
। , हर बार जब आप अपने खोल में CTRL + सी प्रेस
trap 'echo "Dont do this"' 2
अब, यह - (आप अपने आप को बाहर लॉक कर सकते हैं सुनिश्चित करें की तुलना में आप एक पहले से लॉग इन कर रहे हैं और साथ यह परीक्षण एक और टर्मिनल) एक संदेश प्रिंट करेंगे। लाइन को हटाने के लिए मत भूलना!
यदि रुचि है, तो आप स्रोत कोड here में सादे पुराने /bin/sh
सिग्नल हैंडलिंग की जांच कर सकते हैं।
उपरोक्त में टिप्पणियों में कुछ गलत जानकारी थी (अब हटा दी गई), इसलिए अगर यहां रुचि रखने वाला कोई व्यक्ति बहुत अच्छा लिंक है - how the signal handling works।
बच्चे को समाप्त करने से माता-पिता को समाप्त क्यों किया जाएगा? और नहीं, कोई विशेष हैंडलिंग की आवश्यकता नहीं है। –
@ नील बटरवर्थ: मैं नहीं पूछ रहा हूं कि एक बच्चे को समाप्त करने से माता-पिता को समाप्त नहीं किया जा रहा है। प्रश्न यह है कि बाल प्रक्रिया को Ctrl-C ईवेंट क्यों मिलता है, न कि माता-पिता? – vitaut