पहले अपने दूसरे प्रश्न का उत्तर देने के लिए: SIGSTOPऔर SIGKILLआवेदन द्वारा पकड़ा नहीं जा सकता है, लेकिन हर दूसरे संकेत, यहां तक कि कर सकते हैंSIGSEGV । यह संपत्ति डिबगिंग के लिए उपयोगी है - उदाहरण के लिए, सही पुस्तकालय समर्थन के साथ, आप सुन सकते हैं SIGSEGVऔर एक स्टैक बैकट्रेस उत्पन्न करने के लिए दिखा सकते हैं कि जहां सेगफॉल्ट हुआ था।
man 7 signalलिनक्स कमांड लाइन से टाइप करके प्रत्येक सिग्नल जो करता है, उस पर आधिकारिक शब्द (लिनक्स के लिए, वैसे भी) उपलब्ध है । http://linux.die.net/man/7/signal में समान जानकारी है, लेकिन तालिकाएं पढ़ना कठिन है।
हालांकि, संकेतों के साथ कुछ अनुभव के बिना, छोटे विवरणों से जानना मुश्किल है कि वे अभ्यास में क्या करते हैं, इसलिए यहां मेरी व्याख्या है:
कीबोर्ड से ट्रिगर किया गया
SIGINT जब आप हिट करते हैं तब होता है CTRL+C ।
SIGQUIT द्वारा ट्रिगर किया गया है CTRL+\ , और कोर को डंप करता है।
SIGTSTPजब आप हिट करते हैं तो आपके कार्यक्रम को निलंबित कर देता है CTRL+Z। इसके विपरीत SIGSTOP, यह उपलब्ध है, जो कार्यक्रमों को पसंद करता हैvi खुद को निलंबित करने से पहले टर्मिनल को सुरक्षित राज्य में रीसेट करने का मौका ।
टर्मिनल बातचीत
SIGHUP ("हैंगअप") तब होता है जब आप अपना xterm बंद करते हैं (या अन्यथा टर्मिनल को डिस्कनेक्ट करते हैं) जब आपका प्रोग्राम चल रहा होता है।
SIGTTINऔर SIGTTOUअगर यह पृष्ठभूमि में चल रहा है तो टर्मिनल से पढ़ने या लिखने की कोशिश करता है, तो अपने कार्यक्रम को रोकें। के लिए SIGTTOUहोने, मुझे लगता है कि कार्यक्रम आवश्यकताओं के लिखने के /dev/ttyही नहीं, डिफ़ॉल्ट stdout।
सीपीयू अपवाद द्वारा ट्रिगर किया गया
इनका मतलब है कि आपके कार्यक्रम ने कुछ गलत करने की कोशिश की।
SIGILLएक अवैध या अज्ञात प्रोसेसर निर्देश का मतलब है। यदि आप प्रोसेसर I / O पोर्ट को सीधे एक्सेस करने की कोशिश करते हैं, तो यह हो सकता है।
SIGFPEएक हार्डवेयर गणित त्रुटि थी; सबसे अधिक संभावना है कि कार्यक्रम शून्य से विभाजित करने की कोशिश की।
SIGSEGV इसका मतलब है कि आपके कार्यक्रम ने स्मृति के अनपेड क्षेत्र तक पहुँचने का प्रयास किया है।
SIGBUSइसका मतलब है कि प्रोग्राम ने मेमोरी को किसी अन्य तरीके से गलत तरीके से एक्सेस किया है; मैं इस सारांश के विवरण में नहीं जाऊंगा।
प्रक्रिया बातचीत
SIGPIPEयदि आप पाइप के पाठक के अंत को बंद करने के बाद पाइप पर लिखने की कोशिश करते हैं तो ऐसा होता है। देख लो man 7 pipe।
SIGCHLDतब होता है जब आपके द्वारा बनाई गई एक बच्चे की प्रक्रिया या तो समाप्त हो जाती है या उसे निलंबित कर दिया जाता है ( SIGSTOPया इसी तरह)।
आत्म-संकेत के लिए उपयोगी
SIGABRTआमतौर पर प्रोग्राम को कॉल करने के कारण होता है abort(), और डिफ़ॉल्ट रूप से एक कोर डंप का कारण बनता है। एक "पैनिक बटन" की तरह।
SIGALRMalarm()सिस्टम कॉल के कारण होता है , जो कर्नेल को SIGALRMनिर्दिष्ट संख्या में सेकंड के बाद प्रोग्राम में वितरित करने का कारण होगा । देखें man 2 alarmऔर man 2 sleep।
SIGUSR1और SIGUSR2उपयोग किया जाता है, हालांकि कार्यक्रम पसंद करता है। वे प्रक्रियाओं के बीच संकेतन के लिए उपयोगी हो सकते हैं।
व्यवस्थापक द्वारा भेजा गया
इन संकेतों को आम तौर पर, कमांड प्रॉम्प्ट से भेजे जाते हैं के माध्यम से killआदेश, या fgया bgके मामले में SIGCONT।
SIGKILLऔर SIGSTOPअनब्लॉक सिग्नल हैं। पहले हमेशा प्रक्रिया को तुरंत समाप्त करता है; दूसरी प्रक्रिया को निलंबित कर देता है।
SIGCONT एक निलंबित प्रक्रिया शुरू करता है।
SIGTERMका एक बिल्ली के समान संस्करण है SIGKILL।