使用信号量来保证Linux上的单个应用程序实例有什么问题?

时间:2013-01-16 18:44:29

标签: linux

我一直在寻找如何保证我的应用程序只有一个实例可以在Linux上运行。我看到提供的“最佳”建议是打开一个文件,然后尝试锁定它。但也可以通过打开一个命名的POSIX信号量并请求独占访问来实现这一点。对于我的Windows大脑,这似乎是更好的方法。有人可以解释这种方法的缺点,以及为什么文件锁定是可取的?

1 个答案:

答案 0 :(得分:3)

从您发布的kernel.org页面:

Persistence
      POSIX named semaphores have kernel persistence: if not removed by
      sem_unlink(3), a semaphore will exist until the system is shut down.

如果您的流程在明确调用sem_unlink()之前就已经死亡,那么您将无法再次打开应用程序直到重新启动。

如果你正在使用文件锁,那么当你的流程因任何原因结束时会被释放(如你所链接的SO question中提到的那样)