如何查看我的计算机上是否正在运行特定的JAR文件?我只是想确保一个特定的JAR只能在任何时间执行一次 - 所以如果另外一个请求执行同一个jar,那我就不应该再调用那个jar了。
我可以使用上面的代码作为java代码(我将添加到JAR本身)或者作为shellcript(我将用它来调用jar文件)。
该机器将是Linux机器 - CentOS,Debian或Ubuntu或Amazon Linux。
答案 0 :(得分:6)
jps是一个简单的命令行工具,可以打印出当前运行的JVM以及它们正在运行的内容。您可以从shell脚本中调用它。
jps -l
将转储JVM进程ID及其正在执行的主类。我怀疑这是最符合您要求的。
注意到您的评论。 jps不受支持,如果有效担心升级JDK / JRE时无法通过测试轻松缓解,那么可能会使用以下内容:
pgrep -lf java
答案 1 :(得分:3)
尝试创建一个新jar,
用这样的方法创建一个类(不是功能代码,只是一个涂鸦):
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的另一个实例,则会抛出异常:Socket已在使用中。