作者carlcarl (carl)
看板Python
标题Re: [问题] 如何让程式同时只能跑一只
时间Fri Jul 27 18:15:43 2012
看其他deamon的作法是建立一个xxx.pid的档案 然後将pid写到里面
所以我跟着这样做
sleep是开一段时间 用来验证再次开同样process用的
检查我就只单纯检查档案存不存在而已
然後要用root执行
不然可以在开始先建立好一个资料夹
权限设好後 pid的档案就建立在里面 这样就可以不用root权限
#!/usr/bin/env python
# coding: utf-8
import sys
import os
import time
if __name__ == '__main__':
if os.path.exists('/var/run/test.pid'):
f = open('/var/run/test.pid')
s = f.readline()
if not os.path.exists('/proc/' + s):
os.remove('/var/run/test.pid')
print 'The process may crashed before'
else:
sys.exit('Error!')
p = os.getpid()
f = open('/var/run/test.pid', 'w')
f.write(str(p) + '\n')
f.close()
time.sleep(20)
os.remove('/var/run/test.pid')
--
http://blog.carlcarl.tw
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.127.237.167
1F:推 darkgerm:可是这样有个问题,如果程式是执行中被砍掉那档案不是还 07/27 20:56
2F:→ darkgerm:在吗? 07/27 20:56
3F:→ uranusjr:完整的方法要加一些配套, 例如有侦测到 pid 档案时要尝试 07/27 21:49
4F:→ uranusjr:与那个 process 通讯, 如果收不到回应就认定是不正常关闭 07/27 21:49
喔喔 所以在档案里面放的pid 应该是用来检查用的吧
可以拿这个pid去/proc/底下检查
我把程式修了一下~~
资料是参考这边的
http://stackoverflow.com/questions/38056
※ 编辑: carlcarl 来自: 59.127.237.167 (07/27 23:44)