python - How to process SIGTERM signal gracefully? -
let's assume have such trivial daemon written in python:
def mainloop(): while true: # 1. # 2. # 3. important # 4. job # 5. sleep mainloop() and daemonize using start-stop-daemon default sends sigterm (term) signal on --stop.
let's suppose current step performed #2. , @ moment we're sending term signal.
what happens execution terminates immediately.
i've found can handle signal event using signal.signal(signal.sigterm, handler) thing still interrupts current execution , passes control handler.
so, question - possible not interrupt current execution handle term signal in separated thread (?) able set shutdown_flag = true mainloop() had chance stop gracefully?
a class based clean use solution:
import signal import time class gracefulkiller: kill_now = false def __init__(self): signal.signal(signal.sigint, self.exit_gracefully) signal.signal(signal.sigterm, self.exit_gracefully) def exit_gracefully(self,signum, frame): self.kill_now = true if __name__ == '__main__': killer = gracefulkiller() while true: time.sleep(1) print("doing in loop ...") if killer.kill_now: break print "end of program. killed gracefully :)"
Comments
Post a Comment