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-daemonquale segnale send SIGTERM( TERM) di default--stop .
Supponiamo che sia il passaggio corrente eseguito #2. E proprio in questo momento stiamo inviando TERMsegnale.
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 TERMsegnale in un thread separato (?) In modo da poter impostare in shutdown_flag = Truemodo da mainloop()avere la possibilità di fermarmi con grazia?
signalfde mascherando la consegna delSIGTERMprocesso.