संक्षिप्त उत्तर : भेजें SIGTERM
, 30 सेकंड बाद SIGKILL
। यही है, भेजें SIGTERM
, थोड़ा इंतजार करें (यह प्रोग्राम से प्रोग्राम में भिन्न हो सकता है, आप अपने सिस्टम को बेहतर जान सकते हैं, लेकिन 5 से 30 सेकंड का समय पर्याप्त है। मशीन को बंद करते समय, आप देख सकते हैं कि यह स्वचालित रूप से 1'30s तक इंतजार कर रहा है। हड़बड़ी क्यों, आखिर?), तो भेजो SIGKILL
।
उचित जवाब : SIGTERM
, SIGINT
, SIGKILL
यह पर्याप्त से अधिक है। प्रक्रिया बहुत पहले समाप्त हो जाएगी SIGKILL
।
लांग उत्तर : SIGTERM
, SIGINT
, SIGQUIT
, SIGABRT
,SIGKILL
यह अनावश्यक है, लेकिन कम से कम आप अपने संदेश के बारे में प्रक्रिया को भ्रमित नहीं कर रहे हैं। इन सभी संकेतों का मतलब है कि आप चाहते हैं कि यह प्रक्रिया बंद हो जाए और यह बाहर निकले।
कोई फर्क नहीं पड़ता कि आप इस स्पष्टीकरण से क्या जवाब चुनते हैं, इसे ध्यान में रखें!
यदि आप एक संकेत भेजते हैं जिसका अर्थ कुछ और है, तो प्रक्रिया इसे बहुत भिन्न तरीकों से (एक हाथ से) संभाल सकती है। दूसरी ओर, यदि प्रक्रिया सिग्नल को हैंडल नहीं करती है, तो इससे कोई फर्क नहीं पड़ता कि आप आखिर क्या भेजते हैं, प्रक्रिया वैसे भी छोड़ देगी (जब डिफ़ॉल्ट कार्रवाई समाप्त होनी है, निश्चित रूप से)।
तो, आपको अपने आप को एक प्रोग्रामर के रूप में सोचना चाहिए। क्या आप किसी SIGHUP
ऐसे प्रोग्राम हैंडलर को कोड करेंगे, जो किसी प्रोग्राम को किसी चीज़ से जोड़ने के लिए कहता है, या आप उसे दोबारा कनेक्ट करने की कोशिश करने के लिए लूप करेंगे? यह यहाँ मुख्य प्रश्न है! इसीलिए सिर्फ संकेत भेजना महत्वपूर्ण है जिसका मतलब है कि आप क्या चाहते हैं।
लगभग बेवकूफ लंबा जवाब :
तालिका के बोल में प्रासंगिक संकेत होते हैं, और यदि प्रोग्राम उन्हें नहीं संभालता है तो डिफ़ॉल्ट क्रियाएं होती हैं।
मैंने उन्हें आदेश दिया था कि मैं उपयोग करने का सुझाव देता हूं (बीटीडब्ल्यू, मैं आपको उचित उत्तर का उपयोग करने का सुझाव देता हूं , यहां यह नहीं), अगर आपको वास्तव में उन सभी की कोशिश करने की आवश्यकता है (यह कहना मजेदार होगा कि तालिका के संदर्भ में आदेश दिया गया है विनाश वे पैदा कर सकते हैं, लेकिन यह पूरी तरह से सच नहीं है)।
तारांकन चिह्न (*) वाले संकेतों की अनुशंसा नहीं की जाती है। इनके बारे में महत्वपूर्ण बात यह है कि आप कभी भी यह नहीं जान सकते हैं कि यह क्या करने के लिए प्रोग्राम किया गया है। विशेष रूप से SIGUSR
! यह सर्वनाश शुरू कर सकता है (यह एक प्रोग्रामर के लिए एक नि: शुल्क संकेत है कि वह जो चाहे / वह चाहे!)। लेकिन, अगर संभाला नहीं गया है या असंभावित मामले में इसे समाप्त करने के लिए नियंत्रित किया जाता है, तो कार्यक्रम समाप्त हो जाएगा।
तालिका में, एक मूल डंप को समाप्त करने और उत्पन्न करने के लिए डिफ़ॉल्ट विकल्पों के साथ संकेत अंत में, पहले ही छोड़ दिए जाते हैं SIGKILL
।
Signal Value Action Comment
----------------------------------------------------------------------
SIGTERM 15 Term Termination signal
SIGINT 2 Term Famous CONTROL+C interrupt from keyboard
SIGHUP 1 Term Disconnected terminal or parent died
SIGPIPE 13 Term Broken pipe
SIGALRM(*) 14 Term Timer signal from alarm
SIGUSR2(*) 12 Term User-defined signal 2
SIGUSR1(*) 10 Term User-defined signal 1
SIGQUIT 3 Core CONTRL+\ or quit from keyboard
SIGABRT 6 Core Abort signal from abort(3)
SIGSEGV 11 Core Invalid memory reference
SIGILL 4 Core Illegal Instruction
SIGFPE 8 Core Floating point exception
SIGKILL 9 Term Kill signal
तब मैं इस बात के लिए सुझाव है कि लगभग बेवकूफ विस्तृत उत्तर है :
SIGTERM
, SIGINT
, SIGHUP
, SIGPIPE
, SIGQUIT
, SIGABRT
,SIGKILL
और अंत में, द
निश्चित रूप से लंबा लंबा जवाब :
घर पर यह कोशिश मत करो।
SIGTERM
, SIGINT
, SIGHUP
, SIGPIPE
, SIGALRM
, SIGUSR2
, SIGUSR1
, SIGQUIT
, SIGABRT
, SIGSEGV
, SIGILL
, SIGFPE
और कुछ भी नहीं, काम करता है, तो SIGKILL
।
SIGUSR2
इससे पहले SIGUSR1
कि हम कार्यक्रम को सिग्नल नहीं संभालते हैं, हम बेहतर होने की कोशिश करें । और SIGUSR1
अगर यह उनमें से सिर्फ एक को संभालता है, तो इसे संभालना अधिक संभव है।
BTW, KILL : यह SIGKILL
एक प्रक्रिया को भेजने के लिए गलत नहीं है , जैसा कि अन्य उत्तर में कहा गया है। अच्छा, सोचिए जब आप shutdown
कमांड भेजते हैं तो क्या होता है ? यह केवल SIGTERM
और SIGKILL
केवल प्रयास करेगा । आप ऐसा क्यों सोचते हैं? और आपको किसी अन्य सिग्नल की आवश्यकता क्यों है, यदि बहुत ही shutdown
कमांड केवल इन दोनों का उपयोग करता है?
अब, लंबे उत्तर पर वापस जाएं , यह एक अच्छा ऑनलाइनर है:
for SIG in 15 2 3 6 9 ; do echo $SIG ; echo kill -$SIG $PID || break ; sleep 30 ; done
यह संकेतों के बीच 30 सेकंड के लिए सोता है। आपको एक अन्य की आवश्यकता क्यों होगी ? ;)
इसके अलावा, अनुशंसित: उचित उत्तर15 2 9
से केवल संकेतों के साथ इसे आज़माएं ।
सुरक्षा : echo
जब आप जाने के लिए तैयार हों तो दूसरा हटा दें । मैं इसे ऑनलाइनर्स केdry-run
लिए कहता हूं । हमेशा परीक्षण करने के लिए इसका उपयोग करें।
स्क्रिप्ट जानलेवा तरीके से
वास्तव में मैं इस सवाल से इतना घबरा गया था कि मैंने एक छोटी सी स्क्रिप्ट बनाने का फैसला किया। कृपया, इसे यहाँ डाउनलोड करने के लिए स्वतंत्र महसूस करें (क्लोन):
GitHub को Killgraceently रिपॉजिटरी से लिंक