检测Mac OS X中的进程实例

Detecting process instances in Mac OS X

本文关键字:进程 实例 Mac OS 检测      更新时间:2023-10-16

我正在尝试实现一种方法来检测应用程序的另一个实例是否已经启动,并且一直在修补:1.共享内存2.命名互斥3.命名管道

似乎所有这些都有一个缺陷,即如果"主"应用程序崩溃,"IPC"对象将挂起,使应用程序的所有未来实例都认为有另一个实例处于活动状态(直到重新启动)。理想情况下,我希望有一个在进程终止时自动删除的对象,无论是正常情况下还是崩溃时。

想法?

我已经看到通过使用文件和文件锁定来实现这一点。主应用程序检查/tmp中是否存在文件。如果文件当前已锁定,则应用程序已在运行。如果文件不存在或未锁定,则说明该文件未运行。根据操作系统的不同,您需要以原子的方式来避免竞争条件。

这样,如果程序崩溃,操作系统会自动关闭文件。