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