Supponiamo di avere un demone così banale scritto in Python:
def mainloop():
while True:
# 1. do
# 2. some
# 3. important
# 4. job
# 5. sleep
mainloop()
e lo demonizziamo usando start-stop-daemon
quale segnale send SIGTERM
( TERM
) di default--stop
.
Supponiamo che sia il passaggio corrente eseguito #2
. E proprio in questo momento stiamo inviando TERM
segnale.
Quello che succede è che l'esecuzione termina immediatamente.
Ho scoperto che posso gestire l'evento signal usando signal.signal(signal.SIGTERM, handler)
ma il fatto è che interrompe ancora l'esecuzione corrente e passa il controllo a handler
.
Quindi, la mia domanda è: è possibile non interrompere l'esecuzione corrente ma gestire il TERM
segnale in un thread separato (?) In modo da poter impostare in shutdown_flag = True
modo da mainloop()
avere la possibilità di fermarmi con grazia?
signalfd
e mascherando la consegna delSIGTERM
processo.