我需要找到一种正确的方法来阻止我的(Python)程序的两个运行实例。 我目前正在使用以下方法。
在Windows上,
os.popen('wmic process get caption,processid | findstr `programname.exe`')
在Linux上,
os.popen('ps x | grep `programname`')
现在似乎工作正常。这种方法是否正确? 有人可以向我建议一个更好的方法吗?
编辑:感谢回复人员, 上述方法有什么问题吗? 我尝试了linux的pid文件方式。如果pid文件以某种方式被删除怎么办?
答案 0 :(得分:5)
有很多方法:
您需要的是一个服务(在您的应用程序外部),它管理一个可以使用唯一ID的命名空间。执行。
答案 1 :(得分:2)
if (pidfile already exists)
read pidfile content
if (/proc/<pid>/exec == my executable)
already running, exit
else
it´s a stale pidfile, delete it
write my own pid to pidfile
start the 'real' work
最近,我听说过flock(1)工具。它在bash脚本中更容易使用:
( flock -n 200 || exit
# ... commands executed under lock ...
) 200>/var/lock/mylockfile
并且不太难用“真正的”编程语言,只需打开一个文件并尝试在其上获得flock(2)。
答案 2 :(得分:1)
对于linux,请参阅jldupont的答案。 对于Windows,请使用CreateMutex方法创建命名互斥锁。看到: http://msdn.microsoft.com/en-us/library/ms686927%28VS.85%29.aspx