我对Python的守护进程模块的理解是,我可以拥有一个可以执行操作的脚本,生成一个守护进程,并继续执行操作。当脚本完成后,守护进程应该会挂起。是
但那没有发生......
我有一个python脚本,它使用curses来管理一大堆脚本和函数。它非常有效,除非我使用脚本生成一个守护进程。
现在,此应用程序中的守护程序由类表示。例如:
class TestDaemon(DaemonBase):
def __init__(self,stuff):
logger.debug("TestDaemon.__init__()")
def run(self):
logger.debug("TestDaemon entering loop")
while True:
pass
def cleanup(self):
super(TestDaemon,self).cleanup()
logger.debug("TestDaemon.cleanup()")
def load_config(self):
super(TestDaemon,self).load_config()
logger.debug("TestDaemon.load_config()")
守护进程的启动功能如下:
def launch(*args,**kwargs):
import daemon
import lockfile
import signal
import os
oDaemon = TestDaemon(stuff)
context = daemon.DaemonContext(
working_directory=os.path.join(os.getcwd(),sAppName),
umask=0o077, #chmod mode = 777 minus umask. Only current user has access
pidfile=lockfile.FileLock('/home/sheena/.daemons/{0}__{1}.pid'.format(sAppName,sProcessName)),
)
context.signal_map = {
signal.SIGTERM: oDaemon.cleanup, #cleanup
signal.SIGHUP: 'terminate',
signal.SIGUSR1: oDaemon.load_config, #reload config
}
logger.debug("launching daemon")
with context:
oDaemon.run()
logger.debug("daemon launched")
该程序可以记录“启动守护程序”。
在此之后,所有内容都会退出,并且守护程序不会运行。
为什么会发生这种情况的任何想法?
没有例外的证据 - 设置了异常,但没有异常。
问题:为什么会发生这种情况的任何想法?
我试过的东西:
oDaemon.run()
,则它会以完全相同的方式失败with context
替换with daemon.DaemonContext()
。同样的问题我换了:
with context:
oDaemon.run()
与
def run():
while True:
pass
with context:
run()
并且主程序仍然过早退出,但至少它产生了一个守护进程,所以我认为它不喜欢我把东西放在课堂上的方式......
答案 0 :(得分:0)
我们对这个DaemonBase
课程一无所知,但是这个:
with context:
oDaemon.run()
是一个阻塞调用,因为run()
中有无限循环。这就是为什么你的程序无法继续下去的原因。
启动实际守护程序进程的代码在哪里?