कम हिंसक मार संकेत के बीच अंतर -HUP (1) -INT (2) और -MM (15)


32

सबसे हिंसक kill -9(SIGKILL) के अलावा, मैं 3 अन्य सामान्य संकेतों ( यहाँ ) -HUP(1), -INT(2), और -TERM(15) के बीच के अंतर को नहीं समझता ।

किन परिदृश्यों में एक काम करेगा और दूसरा नहीं?

सामान्य तौर पर कब -9( -KILL) विफल होता है?

मेरे लिए, वे प्रक्रिया पूछने के लिए समाप्त करने के लिए लग रहे हैं शान से , बिना सहेजे । कठोरता को रेटिंग दें, मैं डालूंगा -HUP < -TERM < -INT < -KILL


HUPजरूरी नहीं कि कार्यक्रम छोड़ दिया जाएगा। कुछ प्रोग्राम SIGHUPकॉन्फ़िगरेशन फ़ाइलों को पुनः लोड करने के लिए उपयोग करते हैं। SIGKILLजब प्रक्रिया निर्बाध नींद में होती है, तब विफल रहता है, या इसे स्थगित कर दिया जाता है ।
मुरु

जवाबों:


52

SIGKILL चल रही प्रक्रिया को मारने में कभी भी विफल नहीं होता है, यही बात है। अन्य संकेतों से एप्लिकेशन को प्रतिक्रिया करने का मौका मिलता है।

SIGINT, SIGTERM, SIGQUIT और SIGHUP का डिफ़ॉल्ट व्यवहार कार्यक्रम को मारना है। हालाँकि अनुप्रयोगों को इन संकेतों के लिए एक हैंडलर स्थापित करने की अनुमति है। इसलिए जब वे इन संकेतों को प्राप्त करते हैं तो अनुप्रयोगों का वास्तविक व्यवहार सम्मेलन का मामला है (जो प्रत्येक आवेदन का पालन कर सकता है या नहीं कर सकता है), सिस्टम डिज़ाइन का नहीं।

SIGINT लॉट का "सबसे कमजोर" है। इसका पारंपरिक अर्थ है "अभी जो आप कर रहे हैं उसे रोकें और आगे के उपयोगकर्ता इनपुट की प्रतीक्षा करें"। यह एक टर्मिनल में Ctrl+ द्वारा उत्पन्न सिग्नल है C। गैर-संवादात्मक कार्यक्रम आम तौर पर इसे SIGTERM की तरह मानते हैं।

SIGTERM "सामान्य" किल सिग्नल है। यह एप्लिकेशन को सफाई से बाहर निकलने के लिए कहता है। एप्लिकेशन को अपनी स्थिति को बचाने के लिए समय लग सकता है, जैसे कि अस्थायी फ़ाइलों को मुक्त करने के लिए संसाधन जो अन्यथा पीछे रह जाएंगे, आदि। एक आवेदन जो एक महत्वपूर्ण आवेदन के दौरान बाधित नहीं होना चाहता है वह थोड़ी देर के लिए SIGTERM को अनदेखा कर सकता है।

SIGHUP कठोरता के संदर्भ में SIGTERM के समान है, लेकिन इसकी एक विशिष्ट भूमिका है क्योंकि यह स्वचालित रूप से एक टर्मिनल में चल रहे अनुप्रयोगों के लिए भेजा जाता है जब उपयोगकर्ता उस टर्मिनल (etymologically) से डिस्कनेक्ट करता है, क्योंकि उपयोगकर्ता एक टेलीफोन लाइन और मॉडेम के माध्यम से कनेक्ट हो रहा था रुको)। SIGHUP अक्सर अनैच्छिक है, SIGTERM के विपरीत जिसे स्पष्ट रूप से भेजा जाना है, इसलिए अनुप्रयोगों को अपने राज्य को SIGHUP पर सहेजने का प्रयास करना चाहिए। गैर-उपयोगकर्ता-अनुप्रयोग ( डेमन ) के लिए SIGHUP का पूरी तरह से अलग पारंपरिक अर्थ भी है , जो कि उनकी कॉन्फ़िगरेशन फ़ाइल को फिर से लोड करना है।

SIGQUIT आग्नेय संकेतों की सबसे कठोर है। इसका उपयोग तब किया जाता है जब कोई एप्लिकेशन दुर्व्यवहार कर रहा होता है और अब उसे मारना पड़ता है, और डिफ़ॉल्ट रूप से यह परंपरागत रूप से एक कोर डंप फ़ाइल छोड़ देता है (आधुनिक सिस्टम जहां अधिकांश उपयोगकर्ताओं को पता नहीं होता है कि एक मुख्य फ़ाइल डिफ़ॉल्ट रूप से उन्हें उत्पन्न नहीं करती है) । अनुप्रयोग एक हैंडलर सेट कर सकते हैं लेकिन बहुत कम करना चाहिए (विशेष रूप से किसी भी राज्य को बचाने के लिए नहीं) क्योंकि SIGQUIT के इरादे का उपयोग तब किया जाता है जब कुछ गंभीर रूप से गलत हो।


क्या आप "उनके राज्य को बचाने" पर अधिक विस्तार कर सकते हैं? यदि मैं एक पाठ संपादक में हूं और मैं इसे मारता हूं, तो मुझे लगता है कि सामग्री सहेजी नहीं गई है।
केनी

2
@ केनी अधिकांश संपादक फ़ाइल को नहीं सहेजेंगे, क्योंकि आपने अस्थायी संशोधन किए होंगे जिन्हें आपने सहेजने का इरादा नहीं किया था। उन्नत संपादकों (जैसे vi, emacs) के पास एक ऑटो-सेव फाइल है जहां वे समय-समय पर डेटा बचाते हैं; SIGHUP पर वे आमतौर पर यह सुनिश्चित करेंगे कि ऑटो-सेव फ़ाइल अद्यतित है।
गाइल्स का SO-
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.