我正在尝试实现一种方法来检测应用程序的另一个实例是否已经启动,并且一直在修补: 1.共享内存 2.命名的互斥锁 3.命名管道
似乎所有这些都有缺陷,如果“主”应用程序崩溃,“IPC”对象将被挂起,使应用程序的所有未来实例都认为有另一个实例处于活动状态(直到重新启动)。理想情况下,我希望有一个对象在进程终止时自动删除,无论是正常还是崩溃。
想法?
答案 0 :(得分:1)
我已经通过使用文件和文件锁定看到了这一点。主应用程序检查/ tmp中是否存在文件。如果文件当前已锁定,则应用程序已在运行。如果文件不存在或未锁定,则表示文件未运行。根据操作系统的不同,您需要以原子的方式执行此操作,以避免竞争条件。
这样,如果程序崩溃,操作系统会自动关闭文件。