สมมติว่าเรามีดีมอนตัวเล็ก ๆ เขียนในไพ ธ อน:
def mainloop():
while True:
# 1. do
# 2. some
# 3. important
# 4. job
# 5. sleep
mainloop()
และเรา daemonize โดยใช้start-stop-daemon
ซึ่งเริ่มต้นโดยส่งSIGTERM
( TERM
) --stop
สัญญาณ
#2
สมมติว่าขั้นตอนการดำเนินการในปัจจุบันมี และในขณะนี้เรากำลังส่งTERM
สัญญาณ
สิ่งที่เกิดขึ้นคือการกระทำนั้นสิ้นสุดลงทันที
ฉันพบว่าฉันสามารถจัดการเหตุการณ์สัญญาณใช้แต่สิ่งที่เป็นว่ามันยังคงขัดจังหวะการดำเนินการในปัจจุบันและผ่านการควบคุมไปsignal.signal(signal.SIGTERM, handler)
handler
ดังนั้นคำถามของฉันคือ - เป็นไปได้หรือไม่ที่จะไม่ขัดจังหวะการทำงานปัจจุบัน แต่จัดการTERM
สัญญาณในเธรดที่แยกจากกัน (?) เพื่อให้ฉันสามารถตั้งค่าshutdown_flag = True
เพื่อให้mainloop()
มีโอกาสหยุดอย่างสง่างาม?
signalfd
และปิดบังการส่งมอบSIGTERM
กระบวนการ