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

时间:2012-12-13 10:35:05

标签: java shell process jar executable-jar

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

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

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

2 个答案:

答案 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已在使用中。