java - 如果 jar 已经在运行,则阻止它运行?

标签 java jvm locking

<分区>

Possible Duplicate:
java/shellscript code to find out if a jar file is already running on current machine

我很想为此获得一个跨平台的解决方案,但即使它只是 unix 也很好。

简单的解决方案是从 shell(伪代码)执行此操作(如果 ps -aux | grep myJar | print {awk 2}。包含 myPID,请不要运行 myProgram。

现在不幸的是,我们的 linux 团队不希望在生产环境中运行这样的脚本,因为它可能(无可否认)有不良行为。

所以我需要的是能够运行一个文件,并在它运行时查看是否有另一个程序正在运行。如果程序已经在运行并且低于该时间限制,它应该阻止程序运行。

举个例子:

Myprog.jar -- 超时 5 分钟

Myprog.jar 在 cron 中,每 4 分钟调用一次,

第一次调用它启动,第二次调用它还在运行,但是由于没有超时,所以还好。

如果在第三次检查通过时(在执行后 8 分钟)它仍在运行,它就会被杀死,然后它的进程被自己替换。

如果有人能帮助我理解如何做到这一点(我们一直在尝试设置一个锁定文件,但收效甚微)

谢谢!

最佳答案

您可以让您的程序打开一个虚拟文件以使用FileWriter 写入。当您的程序启动时,并保持文件打开直到程序完成。

当你现在启动你的程序的第二个实例时,它也会尝试打开这个文件进行写入,这会抛出一个IOException。 , 因为只有一个进程可以同时拥有一个文件的写句柄。

关于java - 如果 jar 已经在运行,则阻止它运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13861413/

相关文章:

java - 维护线程池任务队列的类型信息

Java 加载非 JAR 扩展名的文件

java - 具有单个类文件的 JVM Xbootclasspath

c - 带锁的 C 读写 (POSIX)

将索引替换为加在一起的下 4 个索引的 Java 代码

java - java中图像的平滑缩放

java - 使用 java 刷新 Excel 查询

java - 使用游标从 SQLite 返回行,数据库为空时出错

grails - 锁定Grails无法正常工作

c# - .NET Framework 中的并发 HashSet<T>?