我正在尝试实现一种方法来检测应用程序的另一个实例是否已经启动,并且一直在修补: 1.共享内存2.命名互斥锁3.命名管道
似乎所有这些都有一个缺陷,即如果“主”应用程序崩溃,"IPC“对象将被挂起,从而使应用程序的所有未来实例认为有另一个实例处于活动状态(直到重启)。理想情况下,我希望有一个对象,它可以在进程终止时自动删除,无论是正常终止还是崩溃。
想法?
发布于 2012-01-11 22:42:54
我见过使用文件和文件锁定来做到这一点。主应用程序检查/tmp中是否存在文件。如果该文件当前已锁定,则该应用程序已在运行。如果文件不存在或未锁定,则它不会运行。根据操作系统的不同,您需要以原子方式执行此操作,以避免竞争条件。
这样,如果程序崩溃,操作系统会自动关闭该文件。
https://stackoverflow.com/questions/8820726
复制相似问题