bash - मैं किस क्रम में सुदृढ़ रूप से बंद करने की प्रक्रियाओं को संकेत भेजूं?




signals job-control (5)

आम तौर पर आप SIGTERM को मारने का डिफ़ॉल्ट भेज देंगे। यह किसी कारण के लिए डिफ़ॉल्ट है। केवल तभी यदि कोई कार्यक्रम उचित समय में बंद नहीं होता है तो क्या आप SIGKILL सहारा लेना चाहिए। लेकिन ध्यान दें कि SIGKILL के साथ कार्यक्रम में चीजों को साफ करने की कोई संभावना नहीं है, अंडर डेटा दूषित हो सकता है।

SIGHUP , SIGHUP "लटका" के लिए खड़ा है और ऐतिहासिक रूप से इसका मतलब है कि मॉडेम डिस्कनेक्ट हो गया। यह अनिवार्य रूप से SIGTERM बराबर है। कारण यह है कि डिमन्स कभी-कभी कॉन्फ़िगर या पुनः लोड करने के लिए SIGHUP का उपयोग करते हैं, यह है कि किसी भी नियंत्रण टर्मिनल से डिमन को डिमन के रूप में अलग करने की आवश्यकता नहीं होती है और इसलिए SIGHUP कभी प्राप्त नहीं होता है, ताकि सामान्य उपयोग के लिए सिग्नल को "मुक्त" माना जा सके। सभी डिमन्स इसे पुनः लोड करने के लिए उपयोग नहीं करते हैं! SIGHUP के लिए डिफ़ॉल्ट कार्रवाई को समाप्त करना है और कई डेमॉन इस तरह से व्यवहार करते हैं! तो आप अंधेरे से डेमन्स को SIGHUP भेज नहीं सकते हैं और उन्हें जीवित रहने की उम्मीद कर सकते हैं।

संपादित करें: SIGINT शायद प्रक्रिया को समाप्त करने के लिए अनुचित है, क्योंकि यह सामान्यतः ^C से जुड़ा हुआ ^C या जो भी टर्मिनल सेटिंग किसी प्रोग्राम को बाधित करना है। कई कार्यक्रम इसे अपने उद्देश्यों के लिए कैप्चर करते हैं, इसलिए काम करने के लिए यह काफी आम है। SIGQUIT आमतौर पर कोर डंप बनाने का डिफ़ॉल्ट होता है, और जब तक कि आप इसके चारों ओर बिछाने वाली कोर फाइल नहीं चाहते हैं, तो कोई भी अच्छा उम्मीदवार नहीं है।

सारांश: यदि आप SIGTERM भेजते हैं और कार्यक्रम आपके समय सीमा के भीतर नहीं मरता है तो उसे SIGKILL भेजें।

एक और question इस जवाब पर एक comment , टिप्पणीकार कहते हैं:

पूरी तरह से जरूरी जब तक हत्या -9 का उपयोग न करें! सिगकिल फंस नहीं जा सकता है इसलिए मारे गए प्रोग्राम किसी भी शटडाउन दिनचर्या नहीं चला सकते हैं जैसे कि अस्थायी फ़ाइलों को मिटाना। सबसे पहले एचयूपी (1), फिर INT (2), फिर QUIT (3) आज़माएं

मैं SIGKILL सिद्धांत में सहमत हूं, लेकिन शेष मेरे लिए खबर है। यह देखते हुए कि kill द्वारा भेजा गया डिफ़ॉल्ट संकेत SIGTERM , मुझे उम्मीद है कि यह मनमाने ढंग से प्रक्रिया के शानदार शट डाउन के लिए सबसे अधिक अपेक्षित संकेत है। साथ ही, मैंने देखा है कि SIGHUP गैर-समाप्ति कारणों के लिए उपयोग किया गया है, जैसे कि डिमन को "अपनी कॉन्फ़िगरेशन फ़ाइल को दोबारा पढ़ें।" और ऐसा लगता है कि SIGINT (वही बाधा जो आप आमतौर पर Ctrl-C के साथ प्राप्त करेंगे, है ना?) व्यापक रूप से समर्थित नहीं है क्योंकि यह होना चाहिए, या बदले में अपमानजनक रूप से समाप्त होना चाहिए।

यह देखते हुए कि SIGKILL एक आखिरी उपाय है - कौन सा सिग्नल, और किस क्रम में , आपको मनमाने ढंग से प्रक्रिया को भेजना चाहिए ताकि इसे यथासंभव पूर्ण रूप से बंद कर दिया जा सके?

यदि आप कर सकते हैं, तो सहायक तथ्यों (व्यक्तिगत वरीयता या राय से परे) या संदर्भों के साथ अपने उत्तरों को प्रमाणित करें।

नोट: मैं विशेष रूप से सर्वोत्तम प्रथाओं में रूचि रखता हूं जिसमें बैश / साइगविन पर विचार शामिल है।

संपादित करें: अब तक, कोई भी आईएनटी या क्विट का उल्लेख नहीं करता है, और एचयूपी का सीमित उल्लेख है। क्या व्यवस्थित प्रक्रिया-हत्या में इन्हें शामिल करने का कोई कारण है?


एचयूपी मुझे बकवास की तरह लगता है। मैं इसे अपनी कॉन्फ़िगरेशन को फिर से पढ़ने के लिए एक डिमन प्राप्त करने के लिए भेजूंगा।

SIGTERM को रोक दिया जा सकता है; आपके डिमन्स को उस सिग्नल को प्राप्त होने पर चलाने के लिए क्लीन-अप कोड हो सकता है। आप सिगकील के लिए ऐसा नहीं कर सकते। इस प्रकार सिगकिल के साथ आप डिमन के लेखक को कोई विकल्प नहीं दे रहे हैं।

Wikipedia पर उस पर और अधिक


SIGTERM वास्तव में एक संदेश भेजने का मतलब है: " क्या आप बहुत दयालु होंगे और आत्महत्या करेंगे "। इसे क्लीनअप और शट डाउन कोड चलाने के लिए एप्लिकेशन द्वारा फंस और संभाला जा सकता है।

SIGKILL आवेदन से फंस नहीं जा सकता है। सफाई के लिए किसी भी मौके के बिना ओएस द्वारा एप्लिकेशन को मार दिया जाता है।

पहले SIGKILL भेजने के लिए यह सामान्य है, कुछ समय सोएं, फिर SIGKILL भेजें।


SIGTERM समाप्त करने के लिए एक आवेदन बताता है। अन्य सिग्नल अन्य चीजों को एप्लिकेशन को बताते हैं जो शट डाउन से संबंधित नहीं हैं लेकिन कभी-कभी एक ही परिणाम हो सकते हैं। उन का प्रयोग न करें। यदि आप एक एप्लिकेशन को बंद करना चाहते हैं, तो इसे बताएं। इसे भ्रामक सिग्नल न दें।

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

सिग्नल के वास्तविक अर्थ के बारे में अधिक जानकारी के लिए, सिग्नेक्शन (2) देखें। "विवरण" के साथ "डिफ़ॉल्ट कार्रवाई" को भ्रमित न करें, वे एक ही चीज़ नहीं हैं।

SIGINT का उपयोग प्रक्रिया के एक इंटरैक्टिव "कीबोर्ड इंटरप्ट" को सिग्नल करने के लिए किया जाता है। कुछ कार्यक्रम टर्मिनल उपयोगकर्ताओं के उद्देश्य के लिए स्थिति को एक विशेष तरीके से संभाल सकते हैं।

SIGHUP का उपयोग यह संकेत करने के लिए किया जाता है कि टर्मिनल गायब हो गया है और अब प्रक्रिया को नहीं देख रहा है। बस इतना ही। कुछ प्रक्रियाएं प्रतिक्रिया में बंद होने का विकल्प चुनती हैं, आम तौर पर क्योंकि उनके ऑपरेशन को टर्मिनल के बिना कोई समझ नहीं आता है, कुछ कॉन्फ़िगरेशन फ़ाइलों को पुन: जांचने जैसी अन्य चीजें करने का विकल्प चुनते हैं।

सिग्कील को कर्नेल से प्रक्रिया को मजबूती से हटाने के लिए प्रयोग किया जाता है। यह इस अर्थ में विशेष है कि यह वास्तव में प्रक्रिया के लिए संकेत नहीं है बल्कि कर्नेल द्वारा सीधे व्याख्या की जाती है।

सिगकिल मत भेजें। SIGKILL निश्चित रूप से स्क्रिप्ट द्वारा कभी नहीं भेजा जाना चाहिए। यदि एप्लिकेशन SIGTERM को संभालता है, तो इसे क्लीनअप में एक सेकंड लग सकता है, इसमें एक मिनट लग सकता है , इसमें एक घंटे लग सकते हैं । अंत में तैयार होने से पहले एप्लिकेशन को क्या करना है इसके आधार पर। किसी भी तर्क जो " मानता है " एक एप्लिकेशन के क्लीनअप अनुक्रम में काफी समय लगा है और एक्स सेकंड के बाद शॉर्टकट या सिगकिल्ड होना आवश्यक है, केवल सादा गलत है

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

ऐसा इसलिए नहीं है क्योंकि आधा दुनिया 5 सेकंड के बाद सिगकिल का उपयोग करती है कि यह बहुत गलत नहीं है।


  • SIGTERM एक विंडो में "एक्स 'पर क्लिक करने के बराबर है।
  • SIGTERM वह है जो Linux बंद होने पर पहले उपयोग करता है।




sigterm