5
我正尝试使用daemon
模块守护进程。代码看起来像这样Python:使用PID文件进行守护进程
import sys
import time
import daemon
import lockfile
def do_things():
while True:
print "hello"
time.sleep(3)
def main()
context = daemon.DaemonContext(stdout=sys.stdout,
pidfile=lockfile.FileLock('test.pid'))
with context:
do_things()
现在,您在这里看到我正在创建一个锁定PID文件。现在我运行这个程序,它运行良好。现在来测试PID /守护功能我用
python test.py
现在这个时候不应该运行启动该程序的另一个实例,作为现有实例已经在运行。原来,第二个实例启动并进入循环(这不是我测试函数中的while
循环)。在这第二个实例运行strace
给出了下面的输出汽车无
stat("/some-path-here/[email protected]", {st_mode=S_IFREG|0666,
st_size=0, ...}) = 0
select(0, NULL, NULL, NULL, {0, 100000}) = 0 (Timeout)
link("/some-path-here/[email protected] 4e1a9720.21520",
"/somepath/test.pid.lock") = -1 EEXIST (File exists)
而这种痕迹似乎永远,直到该进程被强制杀死。锁文件函数确实检测到存在一个现有的锁文件,但问题是程序没有退出。另外我想这个错误被显示,该pid文件已经存在。
如何才能做到这一点?
我尝试了第二个办法,是给予,甚至更坏的结果。工作目录中没有pid文件,它仍在抱怨它的存在!我通过strace确认 – auny
strace给出了“open(”test.pid“,O_WRONLY | O_CREAT | O_EXCL,0644)= -1 EEXIST(File exists)” – auny