python-daemon中的信号处理

时间:2014-01-18 18:53:50

标签: python linux python-2.7 signal-handling python-daemon

我安装了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中缺少文本 pythonDaemon STOP

我做错了什么?

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

1 个答案:

答案 0 :(得分:9)

您的代码看起来很好,但不会调用信号处理程序,因为它的签名错误。像这样:

def programCleanup(signum, frame):

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

  

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