繁体   English   中英

如何正确处理和保留系统关闭(和SIGTERM)以完成其在Python中的工作?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM