2013-04-02 8 views
5

से निपटने के लिए एक linux प्रक्रिया आई/ओ के लिए इंतज़ार कर रहा है, तो (यानी यह SLEEP राज्य में है) और एक SIGKILL संकेत इसके खिलाफ जारी किया जाता है, समाप्ति (STOPPED राज्य) पर यह RUNNING या READY राज्य से होकर गुजरेगी?SIGKILL संकेत

दूसरे शब्दों में, SIGKILL द्वारा उत्पन्न एक सिस्टम बाधा को संभालने की प्रक्रिया के लिए RUNNING या READY राज्य से गुजरना आवश्यक है?

यह जानते हुए कि सामान्य परिस्थितियों में एक प्रक्रिया गिरी से व्यवधान संभाल कर सकते हैं और जानते हुए भी कि SIGKILL है एक अनुत्तरदायी संकेत की हत्या के एक काफी विरोधाभासी उद्देश्य, मैं कितना नियंत्रण प्रक्रिया को दिया जाता है के बारे में शक था हत्या किए जाने, यदि कोई हो पर सब।

+0

'सिगकिल एक दुर्भाग्यपूर्ण उदाहरण है क्योंकि यह एक सिग्नल है जिसे प्राप्त करने की प्रक्रिया द्वारा नियंत्रित नहीं किया जा सकता है। यदि आपका प्रश्न 'सिगकिल' से असंबंधित नहीं है और यह एक मात्र उदाहरण है, तो इसका अर्थ व्यक्त करने के लिए एक और सिग्नल का उपयोग करने पर विचार करें। – nemo

उत्तर

5

सिग्नल कर्नेल द्वारा प्रक्रिया को "सौंप दिया गया" है, इसलिए प्रक्रिया से एक सिग्नल भेजना प्रक्रिया बी को कर्नेल को नियोजित करता है। जब सिगकिल को डिलीवर किया जाता है तो कर्नेल प्रक्रिया (उपयोगकर्ता मोड) द्वारा किसी भी गतिविधि की अनुमति नहीं देता है, विशेष रूप से रुंडउन को संसाधित करता है: atexit call, _exit। कुछ भी तो नहीं। प्रक्रिया बस सिस्टम द्वारा नष्ट कर दिया गया है। इसमें कर्नेल मोड में कुछ गतिविधि शामिल है। Buffered डेटा खो गया है। SYSV semaphores और अन्य कर्नेल लगातार स्मृति वस्तुओं स्मृति में छोड़ दिया जाता है। यह एक असली गड़बड़ हो सकता है।

कर्नेल स्मृति में कुछ एक लटका आप लिनक्स में SysRq इंटरफ़ेस का उपयोग आ रही हैं तो:

http://tldp.org/HOWTO/Remote-Serial-Console-HOWTO/security-sysrq.html

--to एक आदेश दिया शटडाउन आप प्राप्त कर सकते हैं जो कुछ भी झलक प्रदर्शन करते हैं।

यही कारण है कि सिगकिल का उपयोग एक पूर्ण अंतिम उपाय है, क्योंकि आप नहीं जानते कि आप क्या तोड़ रहे हैं। और यह सभी लटकियों को ठीक नहीं करेगा।

आप वास्तव में क्या काम कर रहे हैं?

+0

मुझे नहीं लगता कि ओपी का सवाल 'सिगकिल 'के लिए विशिष्ट था। मैं इसे समझता हूं जैसे "एक प्रक्रिया को सिग्नल को संभालने के लिए सक्रिय होने की आवश्यकता है"। – nemo

+0

सिग्नल प्राप्त करने के लिए एक प्रक्रिया में सीपीयू संदर्भ होना चाहिए। सिगकिल थोड़ा अलग है। प्रक्रियाओं में दो घटक होते हैं - कर्नेल - कभी-कभी पी 0 कहा जाता है, उपयोगकर्ता भूमि कोड, इसे पी 1 कहते हैं। पी 0 और पी 1 को केवल पगेड पूल गैर-पजे हुए पूल में और सिस्टम मेमोरी में वापस कर दिया जाता है जब सिगकिल कर्नेल द्वारा उठाया जाता है। सेमेफोरस जैसी कुछ चीजें कर्नेल मेमोरी में रहती हैं। तो इस अर्थ में पी 1 कभी सक्रिय नहीं होता है। आप निश्चित रूप से तर्क दे सकते हैं कि कुछ पी 0 गतिविधि प्रक्रिया संदर्भ में है, लेकिन आपका उपयोगकर्ता मोड कोड इसके बारे में कुछ भी नहीं कर सकता है। –

+0

हां, मुझे पता है कि और आपकी पोस्ट पहले से ही कहती है कि 'सिगकिल' को संभाला नहीं जा सकता है। लेकिन मुझे नहीं लगता कि ओपी 'सिगकिल' मांग रहा है लेकिन सामान्य रूप से सभी सिग्नल। तो, आपकी टिप्पणी का पहला वाक्य ओपी के प्रश्न आईएमओ का जवाब है। – nemo

1

जिम मैकन्मारा के जवाब के अलावा:

SIGKILL (मारने -9) संभाला नहीं जा सकता।

अधिक जानकारी के लिए https://stackoverflow.com/a/2541618/1456519 पर उत्तर देखें।

संबंधित मुद्दे