पहले अपने दूसरे प्रश्न का उत्तर देने के लिए: 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()
, और डिफ़ॉल्ट रूप से एक कोर डंप का कारण बनता है। एक "पैनिक बटन" की तरह।
SIGALRM
alarm()
सिस्टम कॉल के कारण होता है , जो कर्नेल को SIGALRM
निर्दिष्ट संख्या में सेकंड के बाद प्रोग्राम में वितरित करने का कारण होगा । देखें man 2 alarm
और man 2 sleep
।
SIGUSR1
और SIGUSR2
उपयोग किया जाता है, हालांकि कार्यक्रम पसंद करता है। वे प्रक्रियाओं के बीच संकेतन के लिए उपयोगी हो सकते हैं।
व्यवस्थापक द्वारा भेजा गया
इन संकेतों को आम तौर पर, कमांड प्रॉम्प्ट से भेजे जाते हैं के माध्यम से kill
आदेश, या fg
या bg
के मामले में SIGCONT
।
SIGKILL
और SIGSTOP
अनब्लॉक सिग्नल हैं। पहले हमेशा प्रक्रिया को तुरंत समाप्त करता है; दूसरी प्रक्रिया को निलंबित कर देता है।
SIGCONT
एक निलंबित प्रक्रिया शुरू करता है।
SIGTERM
का एक बिल्ली के समान संस्करण है SIGKILL
।