我正在使用python-daemon,并且遇到一个问题,当我kill -9
处理一个进程时,它会留下一个pidfile(好的),并且下次我运行我的程序时它不起作用,除非我已经手动删除了pidfile(不是行)。
context.close()
我按照在终止之前调用的顺序捕获所有异常——当这种情况发生时(例如在 a 上kill
),/var/run/mydaemon.pid* 文件被删除并且后续的守护进程运行成功。但是,当使用 SIGKILL ( kill -9
) 时,我没有机会调用context.close()
,并且 /var/run 文件仍然存在。在这种情况下,下次我运行我的程序时,它没有成功启动——原始进程返回,但守护进程在context.open()
.
似乎 python-daemon 应该注意到一个进程的 pidfile 不再存在,并将其清除,但这并没有发生。我应该手动做这个吗?
注意:我没有使用with
,因为此代码在 Python 2.4 上运行
from daemon import DaemonContext
from daemon.pidlockfile import PIDLockFile
context = DaemonContext(pidfile = PIDLockFile("/var/run/mydaemon.pid"))
context.open()
try:
retry_main_loop()
except Exception, e:
pass
context.close()