我安装了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正在运行的文本每5秒钟被写入/var/log/syslog
。 但是当我想用kill -TERM *PID*
终止守护进程时,守护进程终止,但syslog中缺less文本pythonDaemon STOP 。
我究竟做错了什么?
注意:我不是from daemon import runner
那里工作的,因为这给了我一个错误(看起来像我需要一个老版本的lockfile
),我不会解决这个问题,除非它是获得信号处理权的唯一可能性。
你的代码看起来很好,除了信号处理程序没有被调用,因为它有错误的签名。 像这样做:
def programCleanup(signum, frame):
引用文档( signal.signal() ):
处理程序被调用两个参数:信号编号和当前的堆栈帧