Oca*_*tal 10 python linux signal-handling python-2.7 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()
Run Code Online (Sandbox Code Playgroud)
当我启动代码时,一切都按预期工作:正在运行的文本pythonDaemon/var/log/syslog每5秒写一次.但是当我想终止守护进程时kill -TERM *PID*守护进程被终止但是syslog中缺少文本pythonDaemon STOP.
我究竟做错了什么?
注意:我没有在from daemon import runner这里工作,因为这给了我一个错误(看起来我需要一个旧版本lockfile),我不会解决这个问题,除非它是唯一能够正确处理信号的可能性.
gre*_*eke 10
你的代码看起来很好,除了没有调用信号处理程序,因为它有错误的签名.像这样:
def programCleanup(signum, frame):
Run Code Online (Sandbox Code Playgroud)
引用文档(signal.signal()):
使用两个参数调用处理程序:信号编号和当前堆栈帧