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-daemon
ce 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 TERM
signal.
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 TERM
signal dans un thread séparé (?) Afin que je puisse régler de shutdown_flag = True
manière à mainloop()
avoir une chance de s'arrêter gracieusement?
signalfd
et en masquant la livraison duSIGTERM
processus.