4

如何限制我的程序仅运行实例?目前我正在将我的程序作为守护进程运行(自动启动和停止),当用户单击并尝试再次启动(这不是有效的用例)时,进程会在用户上下文中启动,我想避免这种情况有很多原因.

我怎样才能做到这一点?

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

有人可以给我一个更好的解决方案吗?我正在使用 ps 来获取进程列表,是否有任何可靠的 API 来完成这项工作?

4

1 回答 1

4

使用计数为 1 的命名信号量。在启动时,检查该信号量是否被占用。如果是,请退出。否则,拿走。

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

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

sem_open 文档中,

返回的信号量描述符可供调用进程使用,直到它被 sem_close() 关闭,或者直到调用者退出或执行。

于 2012-09-06T10:24:14.743 回答