Supposons que nous ayons un démon aussi trivial écrit en python:
def mainloop():
while True:
# 1. do
# 2. some
# 3. important
# 4. job
# 5. sleep
mainloop()
et nous le démonisons en utilisant start-stop-daemonce qui, par défaut, envoie le signal SIGTERM( TERM) --stop.
Supposons que l'étape en cours soit #2. Et en ce moment même, nous envoyons un TERMsignal.
Ce qui se passe, c'est que l'exécution se termine immédiatement.
J'ai trouvé que je peux gérer l'événement signal en utilisant, signal.signal(signal.SIGTERM, handler)mais le fait est qu'il interrompt toujours l'exécution en cours et passe le contrôle à handler.
Donc, ma question est - est-il possible de ne pas interrompre l'exécution en cours mais de gérer le TERMsignal dans un thread séparé (?) Afin que je puisse régler de shutdown_flag = Truemanière à mainloop()avoir une chance de s'arrêter gracieusement?
signalfdet en masquant la livraison duSIGTERMprocessus.