弄清楚jar是否正在运行 - 不是OS依赖

时间:2013-08-09 13:14:29

标签: java perl

我正在寻找一个解决方案,以确定我的.jar是否已经在运行。但是,我需要这个能够在Windows,RedHat,Solaris,OEL等上工作。在perl中的解决方案会很棒。但是,我也可以尝试一个调用jar的解决方案,然后在主类中检查另一个jar是否已经在运行(如果是,则关闭)。我使用java -jar

来调用它

我查看了以下内容:How can I check if a Unix process is running in Perl?但它似乎不适用于Windows。

我也看过这篇文章:Using Perl, how do I check if a process with given name is running or not?但这只适用于Windows。

我想在确定运行jar的操作系统之后可以使用两者的组合,但是我正在寻找一个“更清洁”的选项。

任何帮助都会很棒。

3 个答案:

答案 0 :(得分:4)

使用jdk附带的java进程状态工具:jps。它列出了正在运行的内容,如果程序像java -jar start.jar一样启动,它将显示jar文件的名称:

root@MYBOX:/opt/jetty/logs# jps
31557 start.jar
1891 Jps

您可以围绕jps构建脚本以查看您的jar是否已在运行

您可以提供其他选项jps来打印更多或更少的数据:http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jps.html

答案 1 :(得分:3)

一个简单的解决方案是在文本文件或数据库中写入程序的状态,并在想知道应用程序的状态时读取它。

正如乔治所提到的那样,每隔一秒写一次文本文件(例如)可以让你轻松看到程序是否被卡住了,如果没有写入,比方说,最后5秒。

此外,文本文件与操作系统无关: - )

答案 2 :(得分:0)

Java可以直接运行jarjava -jar foo.jar),也可能是jar包含正在运行的Java程序所需的类。

第一个很容易。您可以使用jps来显示所有正在运行的Java命令。

第二个更难。您甚至不能依赖$CLASSPATH的值或查看执行Java程序时-cp参数的内容。可以在该类路径中提及jar,但不需要,或者在正在使用的一个jar中嵌入的META-INF/MANIFEST.MF文件的类路径中提到jar。