相关疑难解决方法(0)

如何阻止运行同一程序的两个实例?

我需要确保用户一次只能运行我的程序的一个实例.
这意味着,我必须以编程方式检查相同的程序是否已在运行,并在这种情况下退出.

我想到的第一件事就是在程序启动时在某处创建一个文件.然后,程序的每个其他实例将检查此文件并在找到它时退出.
问题是,程序必须始终正常退出并能够删除它创建的文件,以便工作.如果停电,则锁定文件仍然存在,程序无法再次启动.

为了解决这个问题,我决定将第一个程序的进程ID存储到锁定文件中,当另一个实例启动时,它会检查文件中的PID是否附加到某个正在运行的进程.
如果文件不存在,为空,或者PID与任何现有进程不对应,程序将继续运行并将自己的PID写入文件.

这似乎工作得很好 - 即使在意外关闭之后,(现在过时的)进程ID与其他程序相关联的可能性似乎也很低.

但它仍然感觉不对(有由一些不相关的进程被锁的机会),并与进程ID的工作似乎超越C++标准,可能不是非常便携无论是.

那么,还有另一种(更干净,更安全)的方式吗?理想情况下,它可以与ISO 98 C++标准一起使用,也适用于Windows和*nix.
如果它无法独立于平台,Linux/Unix对我来说是一个优先事项.

c++

22
推荐指数
2
解决办法
1万
查看次数

标签 统计

c++ ×1