java - 临时文件、单实例锁和进程终止 (Java)

标签 java windows file locking temporary-files

我当前正在为 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/

相关文章:

java - JPA - 可以将 id 默认为 0 吗?

java - Open Gl ES 2.0 三角形始终为黑色

java - 如何在编码/解码期间忽略基类?

java - 将 UUID 和 User ID 设置到当前请求线程中

file - 检查文件是否为硬链接(hard link)

移动鼠标光标 N 像素的 Windows 命令脚本?

c++ - 检测文件是否已更改的可靠方法

mysql - 我如何通过Windows机器连接到Linux服务器中的mysql数据库

python - 如何在文件名中插入零以使它们的长度相同

c - 文件访问中的段错误