gpt4 book ai didi

python - python-daemon 中的信号处理

转载 作者:IT王子 更新时间:2023-10-29 00:13:18 45 4
gpt4 key购买 nike

我安装了 python-daemon现在我正在尝试正确处理信号。我的代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import signal, time, syslog
import daemon

def runDaemon():
context = daemon.DaemonContext()

context.signal_map = { signal.SIGTERM: programCleanup }

context.open()
with context:
doMainProgram()

def doMainProgram():
while True:
syslog.syslog("pythonDaemon is running")
time.sleep(5)

def programCleanup():
syslog.syslog("pythonDaemon STOP")

if __name__ == "__main__":
runDaemon()

当我启动代码时,一切都按预期工作:文本 pythonDaemon is running 每 5 秒被写入 /var/log/syslog。但是,当我想用​​ kill -TERM *PID* 终止守护进程时,守护进程已终止,但系统日志中缺少文本 pythonDaemon STOP

我做错了什么?

注意:我在这里没有使用 from daemon import runner,因为这给了我一个错误(看起来我需要一个旧版本的 lockfile),我会除非这是获得正确信号处理的唯一可能性,否则不要解决这个问题。

最佳答案

您的代码看起来不错,只是信号处理程序未被调用,因为它具有错误的签名。像这样:

def programCleanup(signum, frame):

引用文档(signal.signal()):

The handler is called with two arguments: the signal number and the current stack frame

关于python - python-daemon 中的信号处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21208458/

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