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