【问题标题】:Signal handling in python-daemonpython-daemon 中的信号处理
【发布时间】:2014-02-08 02:45:44
【问题描述】:

我安装了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 is running 每 5 秒写入一次/var/log/syslog。 但是当我想用kill -TERM *PID* 终止守护进程时,守护进程已终止,但系统日志中缺少文本 pythonDaemon STOP

我做错了什么?

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

【问题讨论】:

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


    【解决方案1】:

    您的代码看起来不错,除了信号处理程序没有被调用,因为它有错误的签名。变成这样:

    def programCleanup(signum, frame):
    

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

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

    【讨论】:

      猜你喜欢
      • 2014-06-16
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多