【发布时间】:2012-08-31 00:09:29
【问题描述】:
如何限制我的程序只运行实例?目前我正在将我的程序作为守护进程运行(自动启动和停止),当用户单击并尝试再次启动时(这不是有效的用例),进程在用户上下文中启动,我想避免这种情况有很多原因.
我怎样才能做到这一点?
到目前为止,我正在获取进程列表并进行一些检查并在开始时自行退出,但是这种方法并不干净,尽管它解决了我的问题。
谁能给我一个更好的解决方案? 而且我正在使用 ps 来获取进程列表,是否有任何可靠的 API 来完成这项工作?
【问题讨论】:
-
也许您可以在第一次启动进程时锁定某个文件,而在后续启动时,如果文件已被锁定,您将拒绝启动...(请参阅
flock(2)) -
当你的守护进程崩溃时可能会产生问题?
-
Mac OS X 上
fnctl的联机帮助页显示“当进程终止时,与给定进程的文件关联的所有锁都将被删除。”,所以我想你会安全的崩溃,但您应始终注意不要造成死锁情况。 -
查看链接:[how-to-prevent-a-linux-program-from-running-more-than-once][1] [1]:stackoverflow.com/questions/3706917/…
标签: objective-c macos osx-lion osx-mountain-lion