यूनिक्स में किल -9 कमांड में नंबर 9 क्यों? [बन्द है]


101

मैं समझता हूं कि यह विषय बंद है, मैं कहीं भी ऑनलाइन नहीं मिल सकता था और मैं सोच रहा था कि समुदाय में प्रोग्रामिंग गुरुओं को यह पता चल सकता है।
मैं आमतौर पर उपयोग करता हूं

kill -9 pid

नौकरी को मारने के लिए। मैं हमेशा 9 की उत्पत्ति के बारे में सोचता था। मैंने इसे ऑनलाइन देखा, और यह कहता है

"9 का मतलब है कि किल सिग्नल जो कि कैटलेबल या इग्नोर नहीं है। दूसरे शब्दों में यह तुरंत छोड़ने के लिए प्रोसेस (कुछ रनिंग एप्लिकेशन) को सिग्नल देगा" (स्रोत: http://wiki.answers.com/Q/What_does_kill_-9_do_in_unix_in_its_entirety )

लेकिन, 9 क्यों? और अन्य संख्याओं के बारे में क्या? क्या इसका कोई ऐतिहासिक महत्व है या यूनिक्स की वास्तुकला के कारण?


6
मुझे लगता है, कि यह सवाल
सुपरयूज़र.कॉम

जवाबों:


89

अन्य संकेतों की सूची के लिए यूनिक्स संकेतों पर विकिपीडिया लेख देखें । सिर्फ 9 नंबर पाने के लिए SIGKILL हुआ।

आप संख्या के रूप में अच्छी तरह से mnemonics का उपयोग कर सकते हैं:

kill -SIGKILL pid

6
दिन में वापस (जिससे मेरा मतलब है 4.xBSD या तो) आप शेल कमांड के साथ एमनॉमिक्स का उपयोग नहीं कर सकते थे, यही वजह है कि नंबर 9 को पुरानी धूल भरी-डेक शेल स्क्रिप्ट के एक बहुत कुछ में लिखा गया है।
zwol


50

मुझे लगता है कि यहाँ एक बेहतर जवाब यह है:

mike@sleepycat:~☺  kill -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP  
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    

9 के "महत्व" के लिए ... मैं कहूंगा कि शायद कोई नहीं है। के अनुसार लिनक्स प्रोग्रामिंग इंटरफ़ेस (पी 388) :

प्रत्येक संकेत एक अद्वितीय (छोटे) पूर्णांक के रूप में परिभाषित किया गया है, क्रमिक रूप से 1 से शुरू होता है। इन पूर्णांकों को SIGxxxx रूप के प्रतीकात्मक नामों से परिभाषित किया गया है। चूँकि प्रत्येक सिग्नल के लिए उपयोग की जाने वाली वास्तविक संख्याएँ पूरे कार्यान्वयन में भिन्न होती हैं , यह इन प्रतीकात्मक नाम हैं जो हमेशा कार्यक्रमों में उपयोग किए जाते हैं।


32

सबसे पहले आपको यह जानना होगा कि यूनिक्स जैसी प्रणालियों में सिग्नल क्या हैं (यह सिर्फ कुछ मिनट लगेगा)।

सिग्नल , एक महत्वपूर्ण घटना हुई है, यह इंगित करने के लिए एक (चल रहे) कार्यक्रम के लिए भेजे गए सॉफ्टवेयर इंटरप्ट हैं।

ईवेंट उपयोगकर्ता अनुरोधों से लेकर अवैध मेमोरी एक्सेस त्रुटियों तक भिन्न हो सकते हैं। कुछ सिग्नल, जैसे कि इंटरप्ट सिग्नल, यह दर्शाता है कि एक उपयोगकर्ता ने प्रोग्राम को कुछ ऐसा करने के लिए कहा है जो नियंत्रण के सामान्य प्रवाह में नहीं है।

कई प्रकार के सिग्नल हैं जिनका हम उपयोग कर सकते हैं - सभी उपलब्ध / संभावित सिग्नलों की पूरी सूची प्राप्त करने के लिए " $ किल-चार्ट " का उपयोग करें : यहां छवि विवरण दर्ज करें

उपरोक्त आउटपुट में यह स्पष्ट रूप से दिखाई देता है, कि प्रत्येक सिग्नल में एक ' सिग्नल नंबर ' (जैसे 1, 2, 3) और एक ' सिग्नल नाम ' (जैसे SIGUP, SIGINT, SIGQUIT) जुड़ा हुआ है। विस्तृत रूप से देखें कि प्रत्येक और प्रत्येक सिग्नल क्या करता है, इस लिंक पर जाएं ।

अंत में, सवाल " किल -9 कमांड में नंबर 9 क्यों आता है ":

किसी प्रोग्राम या स्क्रिप्ट को सिग्नल देने के कई तरीके हैं। सिग्नल भेजने के लिए आमतौर पर इस्तेमाल की जाने वाली विधि में से एक है किल कमांड का उपयोग करना - मूल सिंटैक्स है:

$ kill -signal pid

जहां सिग्नल या तो सिग्नल का नंबर या नाम होता है, उसके बाद प्रक्रिया Id (pid) जिसे सिग्नल भेजा जाएगा।

उदाहरण के लिए - -SIGKILL (या -9 ), सिग्नल तुरंत प्रक्रिया को मारता है।

$ kill -SIGKILL 1001

तथा

$ kill -9 1001

दोनों कमांड एक ही चीज हैं अर्थात ऊपर हमने 'सिग्नल नाम' का उपयोग किया है, और बाद में हमने 'सिग्नल नंबर' का उपयोग किया है।

फैसला : किसी के पास इस बात का खुला विकल्प है कि वह ' कमांड नेम' या 'सिग्नल नंबर' को किल कमांड के साथ इस्तेमाल करे या नहीं ।


19

यह बीटल्स द्वारा "रिवॉल्यूशन 9" का एक संदर्भ है। एक साथ ध्वनि क्लिप का एक संग्रह और शोर मिला, इस रिकॉर्डिंग में जॉन लेनन को "नंबर 9, नंबर 9 ..." पर दोहराया गया और आगे, इस गीत ने 1969 में और अधिक ध्यान आकर्षित किया जब यह पता चला कि जब पीछे की तरफ खेला गया, तो जॉन लग रहा था कहा जा रहा है "मुझे मृत आदमी पर बारी ..."

इसलिए नौवें सिग्नल को किल सिग्नल के सबसे घातक होने के लिए नियत किया गया था।


17
वास्तव में यह नहीं बताया जा सकता है कि क्या आप इसे अपने गधे से बाहर निकाल रहे हैं, या यदि ऐसा मौका है कि यह सच है।
जोनाथन रेनहार्ट

उस विषय का अंत वास्तव में महाकाव्य है, विशेष रूप से मेरे सामने दो टिप्पणियाँ। मैं उस लेख को मारने और किस अनुक्रम का उपयोग करने पर अड़ गया
of

मैं इतना चाहता हूं कि यह सच हो ... :)
nafas

'नंबर 9' कहने वाला व्यक्ति लेनन नहीं है। मुझे संदेह है कि बाकी कहानी में भी उतना ही सच है (अर्थात कोई नहीं) लेकिन कौन जानता है :)
स्टीफन केनेडी

8

यूनिक्स संकेतों की एक बहुत लंबी सूची है, जिसे आप विकिपीडिया पर देख सकते हैं । कुछ भ्रम की स्थिति में, आप वास्तव में killकिसी भी प्रक्रिया को संकेत भेजने के लिए उपयोग कर सकते हैं। उदाहरण के लिए, kill -SIGSTOP 12345बलों को इसके निष्पादन को रोकने के लिए 12345 प्रक्रिया होती है, जबकि kill -SIGCONT 12345इसे फिर से शुरू करने के लिए कहा जाता है। का थोड़ा कम गूढ़ संस्करण kill -9है kill -SIGKILL


2
सिग्नल भेजने वाले अंतर्निहित सिस्टम कॉल को भी कहा जाता है kill। शायद इसलिए क्योंकि संकेतों के मूल सेट (15 के माध्यम से संख्या 1) के लिए डिफ़ॉल्ट व्यवहार प्रक्रिया को समाप्त करना था।
zwol

4

मुझे नहीं लगता कि संख्या 9 का कोई महत्व है। इसके अलावा, आम विश्वास के बावजूद, killन केवल प्रक्रियाओं को मारने के लिए उपयोग किया जाता है , बल्कि एक प्रक्रिया के लिए एक संकेत भी भेजा जाता है। यदि आप वास्तव में उत्सुक हैं तो आप यहां और यहां पढ़ सकते हैं ।


3

क्यों मारें -9: संकेतों की सूची में 9 वें नंबर को "बिल्ली के 9 जीवन को मारने" के संदर्भ में सिगिली चुना गया है।


3

SIGKILLप्रक्रिया को मारने के लिए उपयोग करें। SIGKILLनजरअंदाज या नियंत्रित नहीं किया जा सकता है। लिनक्स में, देने के तरीके SIGKILL

kill -9 <process_pid> 
kill -SIGKILL <process_pid> 
killall -SIGKILL <process_name>
killall -9 <process_name>

1

अपने शेल पर किल -l कमांड टाइप करें

आप पाएंगे कि 9 वें नंबर पर [ 9) SIGKILL ] है, इसलिए कोई भी किल -9 या किल -SIGKILL का उपयोग कर सकता है

SIGKILL निश्चित रूप से किल सिग्नल है, इसे डिस-पोस्ट, इग्नोर या हैंडल नहीं किया जा सकता है। यह हमेशा अपने डिफ़ॉल्ट व्यवहार के साथ काम करता है, जो प्रक्रिया को मारना है।


1

-9Signal_number है, और निर्दिष्ट करता है कि मारने संदेश भेजा KILL (गैर catchable, गैर अनदेखा करने योग्य) प्रकार का होना चाहिए।

kill -9 pid

जो नीचे जैसा है।

kill -SIGKILL pid

एक signal_number निर्दिष्ट किए बिना डिफ़ॉल्ट -15 है, जो TERM (सॉफ़्टवेयर समाप्ति संकेत) है। टंकण के kill <pid>रूप में ही है kill -15 <pid>


0

दोनों ही किल-सिस्किल प्रोसेसिड, किल -9 प्रोसिड के समान हैं। इसकी मूल रूप से प्रक्रिया की मजबूर समाप्ति के लिए।


0

वहाँ कुछ प्रक्रिया है जो इस तरह नहीं मार सकते हैं "% 1 को मार डालो"। अगर हमें उस प्रक्रिया को समाप्त करना है तो उस प्रक्रिया को मारने के लिए विशेष कमांड का उपयोग किया जाता है जो कि -9 है। उदाहरण के लिए खुला vim और बंद करें अगर ctrl + z का उपयोग करके तो नौकरियों को देखें और इस प्रक्रिया की तुलना में मारने की प्रक्रिया को लागू करने के बाद समाप्त नहीं होगा इसलिए यहां हम समाप्ति के लिए किल -9 कमांड का उपयोग करते हैं।

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