किल कमांड में -9 विकल्प का उद्देश्य क्या है?


जवाबों:


28

उबंटू मैन पेज फॉर kill-9स्विच का उद्देश्य बताता है (आमतौर पर एक तड़का हुआ फैशन में):

Name     Num   Action    Description
KILL       9   exit      cannot be blocked

यहाँ एक और आदमी पृष्ठ क्या कहता है।

आदेश killनिर्दिष्ट प्रक्रिया या प्रक्रिया समूह को निर्दिष्ट संकेत भेजता है। यदि कोई संकेत निर्दिष्ट नहीं है, तो TERMसंकेत भेजा जाता है। TERMसंकेत प्रक्रियाओं जो इस संकेत नहीं पकड़ मार डालेगा। अन्य प्रक्रियाओं के लिए, KILL( 9) सिग्नल का उपयोग करना आवश्यक हो सकता है , क्योंकि यह सिग्नल पकड़ा नहीं जा सकता है।


इसलिए, -9स्विच का उपयोग करना सुनिश्चित करता है कि प्रक्रिया प्रभावी रूप से मार दी गई है। भले ही एक जमे हुए या अनुत्तरदायी प्रक्रिया एक सरल TERM संकेत का जवाब नहीं दे सकती है , यह एक KILLसंकेत भेजे जाने पर मर जाएगा ।


40

मार आदेश एक परिभाषित भेज देंगे संकेत दिए गए पहचान (पीआईडी) के साथ एक प्रक्रिया के लिए:

kill -<signal> <pid>

बेशक हम केवल उन प्रक्रियाओं को मार सकते हैं जो हम स्वयं करते हैं, जबकि जड़ सभी प्रक्रियाओं को मार सकती है। कंप्यूटिंग संकेतों के एक अच्छे सारांश के लिए विकिपीडिया देखें ।

संकेत killभेज सकते हैं मैनपेज में सूचीबद्ध हैं । संकेत को नाम या संख्या से दर्शाया जा सकता है। यदि कोई संकेत नहीं दिया जाता है तो डिफ़ॉल्ट संकेत 15 सम्मान। TERMप्रयोग किया जाता है।

नीचे दिए गए सभी तीन आदेश समान हैं:

kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234

के बीच का अंतर SIGTERMऔर SIGKILLजिस तरह से एक आवेदन संकेत पर कार्य कर सकते है:

  • TERM: एक आवेदन को समाप्त करने में सक्षम होगा, यानी एक बंद दिनचर्या को ठीक से चलाएगा।
  • KILL: अनुप्रयोगों को तुरंत रोक दिया जाता है और मार दिया जाता है (जो कुछ मामलों में अनुमानित दुर्घटना की रिपोर्ट करने के लिए डेटा हानि या एपर्ट को बढ़ा सकता है)।

16

ध्यान दें कि निम्नलिखित सभी पर्यायवाची हैं:

kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234

यह इंगित करने योग्य है कि सिग्नल हैंडलिंग की दुनिया में, SIGKILL उन कुछ अनूठे लोगों में से एक है जिन्हें ऑपरेटिंग सिस्टम द्वारा नियंत्रित किया जाता है न कि प्रोग्राम। जब आप दौड़ते हैं kill -9, तो आप एप्लिकेशन को खुद को समाप्त करने के लिए नहीं कह रहे हैं, इसके बजाय आप ओएस को प्रोग्राम को चलाने से रोकने के लिए कह रहे हैं, इससे कोई फर्क नहीं पड़ता कि प्रोग्राम क्या कर रहा है।

SIGKILL भेजे जाने के बाद , प्रोग्राम को तुरंत रोक दिया जाएगा। यदि प्रोग्राम की ओर से कोई कर्नेल कॉल चल रही हैं (उदाहरण के लिए फ़ाइल IO), तो कॉल के आधार पर वे कॉल समाप्त होने तक जारी रह सकती हैं या नहीं भी हो सकती हैं, लेकिन प्रोग्राम स्वयं कोई और नहीं चलेगा। ध्यान दें कि पता लगाया कार्य या कार्य एक डिबगर के तहत चल अलग ढंग से व्यवहार कर सकता है यहाँ।

दूसरा संकेत जो अवरुद्ध नहीं किया जा सकता है वह SIGSTOP है जिसका समान प्रभाव है, लेकिन इसके बजाय कार्यक्रम को जमा देता है; आप इसे फिर से शुरू करने के लिए बाद में SIGCONT भेज सकते हैं । यह व्यवहार पूरी तरह से ओएस द्वारा नियंत्रित किया जाता है, और कार्यक्रम को कोई पूर्व सूचना नहीं मिलती है।

अन्य सभी संकेतों को कार्यक्रम में भेजा जाता है; यह उन्हें चुन सकता है, हालांकि यह चुनता है, या यदि यह संकेत को अनदेखा करता है तो एक डिफ़ॉल्ट व्यवहार का पालन किया जाता है।

यहां कुछ उपयोगी संकेत दिए गए हैं जो आपको खुद को एक प्रक्रिया में भेजने के लिए मिल सकते हैं:

  • SIGHUP - hangup
    उस प्रोग्राम को बताता है जिसे उपयोगकर्ता ने डिस्कनेक्ट कर दिया था (जैसे SSH सत्र या टर्मिनल विंडो बंद थी)।
    आमतौर पर कार्यक्रम का एक सुंदर शटडाउन होता है।
  • जब आप हिट करते हैं तो SIGINT - व्यवधान
    भेजा जाता है CTRL+ C
    आमतौर पर इसका मतलब है कि "जो आप कर रहे हैं उसे रोकें" - कार्यक्रम को मार भी सकता है और नहीं भी कर सकता है
  • SIGTERM - द्वारा और भेजे गए डिफ़ॉल्ट को समाप्त करें । आमतौर पर कार्यक्रम को समाप्त कर देता है ... कभी-कभी कार्यक्रम समाप्त होने के बाद जो कुछ भी कर रहा है।
    killkillall
  • SIGSTOP - जब आप प्रोग्राम को रोकते हैं , तो रुक
    जाते हैं CTRL+ Z
    प्रोग्राम पर विराम लगाते हैं , ऊपर चर्चा की गई है
  • SIGPIPE - पाइप बंद
    कार्यक्रम उस पाइपलाइन को बंद कर दिया है कि कार्यक्रम बताता है। आमतौर पर कार्यक्रम को समाप्त करता है।
    उदाहरण के लिए , पहली पंक्ति के प्रिंट होने के बाद cat /etc/passwd | head -n1SIGPIPE को catप्रक्रिया में भेजा जाएगा , जिससे catपूरी फाइल खत्म करने से पहले समाप्त हो जाएगी।

जबकि ये सभी संकेत अपनी स्वयं की सेटिंग में "स्वाभाविक रूप से" होते हैं, आप वांछित परिणाम प्राप्त करने के लिए एक शर्त को नकली करने के लिए संकेत का उपयोग कर सकते हैं।

उदाहरण के लिए, यदि आप किसी के SSH सत्र को समाप्त करना चाहते हैं, तो आप इस प्रक्रिया को आसानी से मार सकते हैं, लेकिन ऐसा करके आप इसे अपनी HISTORY फ़ाइल को अपडेट करने से रोकेंगे, जो सुरक्षा कारणों से महत्वपूर्ण हो सकती है। लेकिन इसके बजाय यदि आप इसे SITEUP भेजते हैं , तो प्रक्रिया मान लेगी कि कनेक्शन मर गया है और अपने मानक सफाई का प्रदर्शन करेगा।


Ctrl + \ Send SIGQUIT, जहां डिफ़ॉल्ट कार्रवाई कोर डंप और समाप्त करना है। इसका उपयोग किया जा सकता है यदि कोई प्रोग्राम बहुत गलत कर रहा है, तो आपको इसे तुरंत रोकने की आवश्यकता है, और बाद में इसे डिबग करने में सक्षम होना चाहेंगे।
साइमन रिक्टर

@SimonRichter ओह, तुम सही हो। तय की।
tylerl

6

किल -9 अर्थ: कर्नेल द्वारा प्रक्रिया को मार दिया जाएगा; इस संकेत को नजरअंदाज नहीं किया जा सकता है। 9 का मतलब होता है KILL सिग्नल जो कैटलेबल या इग्नोर नहीं होता

उपयोग: SIGKILL सिंघल

किल अर्थ: बिना किसी सिग्नल के किल कमांड 15 सिग्नल को पास करता है, जो प्रक्रिया को सामान्य तरीके से समाप्त करता है।

उपयोग: SIGTERM संकेत, जिसे प्रोग्रामर द्वारा नियंत्रित किया जा सकता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.