加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 仅允许一个正在运行的程序实例

发布时间:2020-12-16 07:32:11 所属栏目:百科 来源:网络整理
导读:如何限制我的程序只运行实例?目前我正在运行我的程序作为守护程序(自动启动和停止),当用户单击并尝试再次启动时(这不是一个有效的用例),进程在用户上下文中启动,我想避免这种情况有很多原因. 我怎样才能实现这一目标? 截至目前我正在获取进程列表并进行一
如何限制我的程序只运行实例?目前我正在运行我的程序作为守护程序(自动启动和停止),当用户单击并尝试再次启动时(这不是一个有效的用例),进程在用户上下文中启动,我想避免这种情况有很多原因.

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

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

谁能给我一个更好的解决方案?
我正在使用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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读