在python守护进程中的信号处理

我安装了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() ):

处理程序被调用两个参数:信号编号和当前的堆栈帧