क्या यह है कि डॉकटर कंटेनर के अंदर चलने वाली प्रक्रिया को सही तरीके से रोकने का प्रयास करता है, जबकि डॉक मारने वाला एक किल सिग्नल भेजेगा?
मूल रूप से हां, अंतर सूक्ष्म है, लेकिन कमांड लाइन संदर्भ में उल्लिखित है :
- docker stop : एक चल रहे कंटेनर को रोकें ( SIGTERM भेजें, और फिर अनुग्रह अवधि के बाद SIGKILL ) [...] कंटेनर के अंदर मुख्य प्रक्रिया SIGTERM प्राप्त करेगी, और एक अनुग्रह अवधि के बाद, SIGKILL। [जोर मेरा]
- docker मार : एक रनिंग कंटेनर को मारें ( SIGKILL, या निर्दिष्ट सिग्नल भेजें ) [...] कंटेनर के अंदर मुख्य प्रक्रिया को SIGKILL, या विकल्प - signal के साथ निर्दिष्ट कोई भी संकेत भेजा जाएगा। [जोर मेरा]
इसलिए stop
मानक POSIX सिग्नल भेजकर एक सुंदर शटडाउन को ट्रिगर करने का प्रयास करता है SIGTERM
, जबकि kill
डिफ़ॉल्ट रूप से प्रक्रिया को मारता है (लेकिन किसी अन्य सिग्नल को भेजने की अनुमति भी देता है):
SIGTERM सिग्नल को समाप्ति के लिए अनुरोध करने के लिए एक प्रक्रिया में भेजा जाता है। SIGKILL सिग्नल के विपरीत, इसे प्रक्रिया द्वारा पकड़ा और व्याख्या या अनदेखा किया जा सकता है। यह यदि आवश्यक हो तो संसाधनों को जारी करने और राज्य को बचाने के लिए अच्छा समाप्ति प्रदर्शन करने की अनुमति देता है। यह ध्यान दिया जाना चाहिए कि SIGINT लगभग SIGTERM के समान है।
वैसे भी लागू नहीं होने पर, प्रक्रियाओं से आम तौर पर SIGTERM
सुशोभित रूप से निपटने और उनकी जिम्मेदारियों के आधार पर सही काम करने की उम्मीद की जाती है - यह ग्रेसफुल शटडाउन प्रयास के कारण आसानी से विफल हो सकता है क्योंकि अनुग्रह अवधि की तुलना में अधिक समय लग रहा है, जो कि विचार करने के लिए कुछ है कि क्या डेटा अखंडता है सर्वोपरि (जैसे डेटाबेस के लिए); अधिक विस्तृत विवरण के लिए उदाहरण के लिए मेजर हेडन का साइजमीटर बनाम सिगिल देखें :
आवेदन यह निर्धारित कर सकता है कि एक बार SIGTERM प्राप्त होने के बाद वह क्या करना चाहता है। हालांकि अधिकांश एप्लिकेशन अपने संसाधनों को साफ करेंगे और रोकेंगे, कुछ नहीं। जब कोई SIGTERM प्राप्त होता है तो पूरी तरह से अलग करने के लिए एक एप्लिकेशन को कॉन्फ़िगर किया जा सकता है। इसके अलावा, यदि एप्लिकेशन खराब स्थिति में है, जैसे कि डिस्क I / O की प्रतीक्षा कर रहा है, तो यह उस सिग्नल पर कार्य करने में सक्षम नहीं हो सकता है जो भेजा गया था।