आइए मान लेते हैं कि हमारे पास अजगर में लिखा गया ऐसा तुच्छ दान है:
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
।