2016-12-03 9 views
6

के साथ डॉकर कंटेनर के अंदर पिड 1 को मार नहीं सकता है, इसलिए, मैं डॉकर कंटेनर में मुख्य पायथन प्रक्रिया (पीआईडी ​​1) को मारना चाहता हूं। लेकिन SIGTERM, SIGKILL कार्य जैसे समापन संकेतों में से कोई भी नहीं। मेरा मतलब है, चल रहा है kill -SIGKILL 1 कोई प्रभाव नहीं है। कंटेनर के अंदर से मैं 1 को पिड कैसे मार सकता हूं? मैं docker stop या इसी तरह के समाधान चलाने के लिए नहीं चाहता हूं।सिगकिल

+0

सिगिल को इस तरह से पीआईडी ​​1 तक नहीं पहुंचाया जाएगा (इसके बजाय आप कुछ हैंडलर सक्रिय कर सकते हैं, लेकिन यह प्रयोग करने के लिए कुछ है) –

+0

मैं पीआईडी ​​1 को कैसे मार सकता हूं? (अंतिम समाधान 'entrypoint.sh' के माध्यम से पायथन कोड चला रहा है, इसलिए पाइथन कोड पीआईडी ​​नहीं होगा 1) – Pooya

+0

मैंने पाया कि SIGSEGVing यह ज्यादातर मामलों में एक प्रभावी समाधान है। –

उत्तर

0

डॉकर इश्यू ट्रैकर के अनुसार और कैसे पिड 1 एस राज्य के सामान्य दस्तावेज, आपको विशेष रूप से सिग्नल में हैंडलर जोड़ने और उनसे प्रक्रिया को मारने की आवश्यकता है।

signal.signal(signal.SIGINT, exit_gracefully) 
signal.signal(signal.SIGTERM, exit_gracefully) 

exit_gracefully से परिभाषित करने की और अंत में sys.exit(0) फोन की जरूरत है।

यह व्यवहार कर्नेल द्वारा वांछित और लागू किया गया है क्योंकि यह sigaction डिफ़ॉल्ट को कॉल नहीं करेगा, जो अन्य पिड्स पर समाप्त हो रहा है।

हमें Node.js. में कुछ ऐसा करने की आवश्यकता है।

संबंधित मुद्दे