我正在使用 Objective-c 在 Mac 中编写命令行应用程序
在应用程序启动时,我想检查同一应用程序的另一个实例是否已经在运行。如果是,那么我应该等待它完成或退出当前实例或退出另一个实例等。
有什么办法吗?
最佳答案
标准的 Unix 解决方案是创建一个“运行文件”。当您启动时,您尝试创建该文件并将您的 pid 写入该文件(如果它不存在);如果它确实存在,请从中读取 pid,如果有一个正在运行的程序具有该 pid 和您的进程名称,请等待/退出/随便。
问题是,你把那个文件放在哪里,你叫它什么?
首先,您必须确定“已经在运行”的确切含义。显然不是“世界上任何地方”,但它可以是从“当前机器上的任何地方”到“当前桌面 session 中”的任何地方。 (例如,如果用户 A 启动您的程序,暂停它,然后用户 B 出现并通过快速用户切换接管计算机,她是否能够运行该程序?)
对于该问题的几乎所有合理答案,都有一个明显的路径名模式。例如,在 Mac 上,/tmp 在系统范围内共享,而 $TMPDIR 特定于给定 session ,因此,例如,/tmp/${ARGV[0]}.pid 是表示“只有一个”的好方法在机器上复制,句点”,而 ${TMPDIR}/${ARGV[0]}.pid 是表示“每个 session 只有一个副本”的好方法。
关于objective-c - 如何检查应用程序/二进制文件的另一个实例是否已经在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10814293/