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

2024-05-01 21:20:11 发布

您现在位置: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的用法似乎不起作用,第二个print永远不会被调用。

我读过一些关于atexit.register(handler)而不是signal.signal(signal.SIGTERM,handler)的单词,但是在kill时什么都不调用。


Tags: 程序nonesignaltime信号进程os系统
1条回答
网友
1楼 · 发布于 2024-05-01 21:20:11

你的代码几乎可以工作,除了你清理后忘记退出。

我们经常需要捕捉各种其他信号,比如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)

在许多系统中,在关机期间,普通进程没有太多时间进行清理。为了安全起见,您可以write an init.d script停止守护进程并等待它。

相关问题 更多 >