आइए मान लेते हैं कि हमारे पास अजगर में लिखा गया ऐसा तुच्छ दान है:
def mainloop():
while True:
# 1. do
# 2. some
# 3. important
# 4. job
# 5. sleep
mainloop()
और हम इसे start-stop-daemonडिफ़ॉल्ट रूप से SIGTERM( TERM) सिग्नल पर भेजकर उपयोग करते हैं --stop।
मान लीजिए कि प्रदर्शन किया गया वर्तमान चरण है #2। और इसी क्षण हम TERMसंकेत भेज रहे हैं ।
क्या होता है कि निष्पादन तुरंत समाप्त हो जाता है।
मैंने पाया है कि मैं सिग्नल इवेंट का उपयोग कर संभाल सकता हूं signal.signal(signal.SIGTERM, handler)लेकिन बात यह है कि यह अभी भी वर्तमान निष्पादन को बाधित करता है और नियंत्रण को पास करता है handler।
तो, मेरा सवाल यह है - क्या वर्तमान निष्पादन को बाधित नहीं करना संभव है, लेकिन TERMएक अलग थ्रेड (?) में सिग्नल को संभालना है ताकि मैं सेट कर पाऊं shutdown_flag = Trueताकि mainloop()कृपा से रोकने का मौका मिले?
signalfdके वितरण के लिए उपयोग और मास्किंग करके पहले पूछ रहे हैंSIGTERM।