2014-01-18 49 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()):

該處理程序被調用時兩個參數:信號數和當前堆棧幀