[英]How to properly handle and retain system shutdown (and SIGTERM) in order to finish its job in Python?
基本需求:我有一个Python守护进程,它通过os.system调用另一个程序。 我的愿望是能够正确处理系统关闭或SIGTERM,以便让被调用的程序返回然后退出。
我已经尝试过:我尝试过使用信号的方法:
import signal, time
def handler(signum = None, frame = None):
print 'Signal handler called with signal', signum
time.sleep(3)
#here check if process is done
print 'Wait done'
signal.signal(signal.SIGTERM , handler)
while True:
time.sleep(6)
time.sleep的使用似乎不起作用,并且永远不会调用第二个打印。
我读过几句关于atexit.register(handler)而不是signal.signal(signal.SIGTERM,handler)的文字,但没有在kill上调用任何内容。
您的代码几乎可以正常工作,除非您在清理后忘记退出。
我们经常需要捕获各种其他信号,如INT,HUP和QUIT,但与守护进程不同。
import sys, signal, time
def handler(signum = None, frame = None):
print 'Signal handler called with signal', signum
time.sleep(1) #here check if process is done
print 'Wait done'
sys.exit(0)
for sig in [signal.SIGTERM, signal.SIGINT, signal.SIGHUP, signal.SIGQUIT]:
signal.signal(sig, handler)
while True:
time.sleep(6)
在许多系统上,普通过程在关机期间没有太多时间进行清理。 为了安全起见,您可以编写一个init.d脚本来停止守护进程并等待它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.