2014-01-18 51 views
8

我安装了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运行文本被写入/var/log/syslog每5秒。 但是当我想用kill -TERM *PID*终止守护进程时,守护进程终止,但syslog中缺少文本pythonDaemon STOP

我在做什么错?

注意:我不是在from daemon import runner这里工作,因为这给我一个错误(看起来像我需要一个老版本lockfile),我不会解决这个问题,除非它是获得信号处理权的唯一可能性。

回答

8

你的代码看起来很好,除非信号处理程序没有被调用,因为它有错误的签名。使这样的:

def programCleanup(signum, frame): 

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

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