java / shellscript代码,用于查明jar文件是否已在当前计算机上运行

如何确定我的计算机上是否正在运行特定的JAR文件? 我只是想确保一个特定的JAR只在任何时间执行一次 – 所以如果执行同一个jar的另一个请求进来,那么我不应该再次调用那个jar。

我可以使用上面的代码作为java代码(我将添加到该JAR本身)或shellcript(我将用于调用jar文件)。

该机器将是Linux机器 – CentOS,Debian或Ubuntu或Amazon Linux。

jps是一个简单的命令行工具,可以打印出当前运行的JVM以及它们正在运行的内容。 您可以从shell脚本调用它。

jps -l将转储JVM进程ID及其正在执行的主类。 我怀疑这是最符合您要求的。

注意到你的评论。 jps不受支持,如果在升级JDK / JRE时无法通过测试轻松缓解有效的担心,那么可能会使用以下内容:

 pgrep -lf java 

尝试创建一个新的jar,

用这样的方法创建一个类(不是function代码,只是一个涂鸦):

 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的另一个实例,则会抛出exception:Socket已在使用中。