我当前正在为 Java 应用程序使用临时文件夹来创建锁,以便一次只能运行一个实例。当程序退出时,必须删除该锁定文件。
这很好,除了进程被终止的情况(不允许正常关闭,例如从 Windows 任务管理器关闭)。如果发生这种情况,用户将永远无法再次运行该程序...... eek
有人有建议吗?有没有办法让操作系统在重新启动时删除文件夹或类似的东西?我应该找到另一种方法来拥有“单实例锁吗?”
此外,如果可能的话,解决方案应该是跨平台的......
最佳答案
我认为提到的锁定文件是一个好方法: - 应用程序启动时,检查锁定文件 - 如果不存在,则创建它并存储该进程的ID 在该文件内创建文件 - 如果确实存在,读取文件中的pid并查看该进程是否存在 仍在运行 - 如果没有,请替换锁定文件并在其中存储您自己的进程ID - 如果进程仍在运行,则返回错误并退出
使用this(javasysmon)获取PID以及盒子上正在运行的进程
您应该在主程序中添加一个 ShutDownHook 来清理文件夹,这将捕获很大比例的终止。
有关 JVM 的更可靠的 Hook ,请参阅本文:
http://www.ibm.com/developerworks/java/library/i-signalhandling/
关于java - 临时文件、单实例锁和进程终止 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3445233/