如何确定我的机器上是否正在运行特定的 JAR 文件?我只是想确保一个特定的 JAR 在任何时候只执行一次——所以如果另一个执行同一个 jar 的请求进来,那么我不应该再次调用那个 jar。
我可以将上述代码用作 java 代码(我将添加到该 JAR 本身)或 shellscript(我将使用它来调用 jar 文件)。
该机器将是一台 Linux 机器——CentOS、Debian、Ubuntu 或 Amazon Linux。
如何确定我的机器上是否正在运行特定的 JAR 文件?我只是想确保一个特定的 JAR 在任何时候只执行一次——所以如果另一个执行同一个 jar 的请求进来,那么我不应该再次调用那个 jar。
我可以将上述代码用作 java 代码(我将添加到该 JAR 本身)或 shellscript(我将使用它来调用 jar 文件)。
该机器将是一台 Linux 机器——CentOS、Debian、Ubuntu 或 Amazon Linux。
jps是一个简单的命令行工具,可以打印出当前正在运行的 JVM 以及它们正在运行的内容。您可以从 shell 脚本调用它。
jps -l
将转储 JVM 进程 ID 和它正在执行的主类。我怀疑这最适合您的要求。
注意到您的评论。jps 不受支持,如果在升级 JDK/JRE 时无法通过测试轻松缓解这种担忧,那么也许可以使用以下方法:
pgrep -lf java
尝试创建一个新罐子,
用这样的方法在里面创建一个类(还不是功能代码,只是一个涂鸦):
static ServerSocket unicorn;
public void load(){
unicorn=new ServerSocket(39483); // whatever-port
URLClassLoader myloader = new URLClassLoader(new URL[]{this.getClass().getResource("/META-INF/specific.jar")});
... // do all your unique stuff
Runtime.addShutdownHook(new Runnable(){unicorn.close();})
}
将您的 specific.jar 放在 new.jar 中。如果尝试加载此 jar 的另一个实例,则会引发异常:套接字已在使用中。