Mari kita asumsikan kita memiliki daemon sepele yang ditulis dengan python:
def mainloop():
while True:
# 1. do
# 2. some
# 3. important
# 4. job
# 5. sleep
mainloop()
dan kami mengubahnya menggunakan start-stop-daemon
yang secara default mengirimkan sinyal SIGTERM
( TERM
) aktif --stop
.
Misalkan langkah saat ini dilakukan adalah #2
. Dan saat ini kami sedang mengirim TERM
sinyal.
Apa yang terjadi adalah bahwa eksekusi segera berakhir.
Saya telah menemukan bahwa saya dapat menangani acara sinyal menggunakan signal.signal(signal.SIGTERM, handler)
tetapi masalahnya adalah masih mengganggu eksekusi saat ini dan melewati kontrol handler
.
Jadi, pertanyaan saya adalah - apakah mungkin untuk tidak menghentikan eksekusi saat ini tetapi menangani TERM
sinyal di utas yang terpisah (?) Sehingga saya dapat mengatur shutdown_flag = True
sehingga mainloop()
memiliki kesempatan untuk berhenti dengan anggun?
signalfd
dan menutupi pengirimanSIGTERM
ke proses.