检测 Mac OS X 中的流程实例

发布于 2024-12-25 22:21:30 字数 204 浏览 2 评论 0原文

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

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

有想法吗?

I'm trying to implement a way to detect whether another instance of an application has already been started, and have been tinkering with:
1. Shared memory
2. Named mutexes
3. Named pipes

Seems all of these have the flaw that if the "main" application crashes, the "IPC" object will be left hanging making all future instances of the application think that there is another instance active (until a reboot). Ideally I'd like to have an object that is automatically removed when the process is terminated, whether normally or by a crash.

Ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你的背包 2025-01-01 22:21:30

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

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

I've seen this done by using a file and file locking. The main app check for the existence of a file in /tmp. If the file is currently locked then the application is already running. If the file does not exist or is not locked then it is not running. Depending upon the OS you need to do this in a fashion that is atomic to avoid race conditions.

This way if a program crashes the file is automatically closed by the OS.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文