如何限制我的程序仅运行实例?目前我正在将我的程序作为守护进程运行(自动启动和停止),当用户单击并尝试再次启动(这不是有效的用例)时,进程会在用户上下文中启动,我想避免这种情况有很多原因.
我怎样才能做到这一点?
截至目前,我正在获取进程列表并在开始时进行一些检查并退出,但这种方法并不干净,尽管它解决了我的问题。
有人可以给我一个更好的解决方案吗?我正在使用 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 文档中,
返回的信号量描述符可供调用进程使用,直到它被 sem_close() 关闭,或者直到调用者退出或执行。