gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:23:34 26 4
gpt4 key购买 nike

基本需求: 我有一个 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)

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

关于python - 如何正确处理和保留系统关闭(和 SIGTERM)以完成其在 Python 中的工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8617363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com