运维开发网

objective-C语言 仅允许一个正在运行的程序实例

运维开发网 https://www.qedev.com 2020-03-03 09:11 出处:网络 作者:运维开发网整理
如何限制我的程序只运行实例?目前我正在运行我的程序作为守护程序(自动启动和停止),当用户单击并尝试再次启动时(这不是一个有效的用例),进程在用户上下文中启动,我想避免这种情况有很多原因. 我怎样才能实现这一目标? 截至目前我正在获取进程列表并进行一些检查并在开始时退出,但这种方法并不干净,尽管它解决了我的问题. 谁能给我一个更好的解决方案? 我正在使用ps来获取进程列表,有没有可靠的API来完成这
如何限制我的程序只运行实例?目前我正在运行我的程序作为守护程序(自动启动和停止),当用户单击并尝试再次启动时(这不是一个有效的用例),进程在用户上下文中启动,我想避免这种情况有很多原因.

我怎样才能实现这一目标?

截至目前我正在获取进程列表并进行一些检查并在开始时退出,但这种方法并不干净,尽管它解决了我的问题.

谁能给我一个更好的解决方案?

我正在使用ps来获取进程列表,有没有可靠的API来完成这项工作?

使用计数为1的命名信号量.在启动时,检查是否采用了此信号量.如果是,退出.否则,接受它.

概念证明代码:(放在应用程序入口点附近)

#include <semaphore.h>
...
if (sem_open(<UUID string for my app>, O_CREAT, 600, 1) == SEM_FAILED) {
  exit(0);
}

从sem_open documentation,

The returned semaphore descriptor is available to the calling process until it is closed with sem_close(), or until the caller exits or execs.

0

精彩评论

暂无评论...
验证码 换一张
取 消