我正在修改我编写的应用程序,以防止多个实例同时运行。
我的第一个想法是(根据the Linux FHS)简单地将PID文件存储在/var/run
中。通过这种方式,我可以检查PID文件是否存在,如果出现则退出并显示错误。
现在,如果我希望我的应用程序可移植,我必须考虑每个系统(f.ex.Windows)上都不存在/var/run
。
在这种情况下,最佳做法是什么?
注意:它不一定是PID文件。一个0字节的“锁定”文件也可以解决这个问题。 PID文件的优点是还可以为需要调查问题的人提供PID。
澄清:该应用程序是一个备份脚本,通常由定义良好的用户运行。
答案 0 :(得分:1)
其中一种方法是让您的应用程序依赖于移植框架(如Qt)。这样的框架提供了平台的抽象,允许您始终放在“正确的位置”(例如,对于Windows,它在XP,Vista / 7之间变化)。例如,您可以查看QSettings 如果您不能依赖框架,那么挖掘他们的代码可能会提供高级答案。
答案 1 :(得分:0)
IPC对象怎么样? IPC对象是系统范围的,对吧?假设我们有一个名为“pp1232fafdsafd”的IPC对象,第二次打开它时,linux会将errno设置为EEXIST。我们可以检查errno以防止多个实例运行。