我想检查一罐我的罐子是否在用户系统上运行,然后重新启动它(如果它已关闭)。
我知道命令jps -l
可以检查当前正在运行的jar。唯一的问题是,要使该行正常工作,它需要用户安装JDK。因此,我当时想知道是否有与jps -l
行等效的行,它不需要JDK或其他任何东西,而只是检查特定的jar是否正在运行。
过去,我还使用Windows的cmd /c tasklist
行和Mac的top -F -R -o cpu
行。要检查某个应用程序或exe是否正在运行,但这似乎并不起作用。在Windows上运行tasklist
行时,然后我检查一个名为“ myApp”的exe,找不到它。即使它可能正在运行。否则,这将是检查运行的应用程序,exe或jar的理想方法。
这是一个示例代码,说明我如何尝试使用tasklist
命令检查特定的可执行文件。
try {
String procss;
Process pRun = Runtime.getRuntime().exec("cmd /c tasklist");
BufferedReader input = new BufferedReader(new InputStreamReader(pRun.getInputStream()));
while ((procss = input.readLine()) != null) {
if(!procss.contains("myApp"))
{
//Runtime command to launch exe or app.
}
}
input.close();
} catch (Exception err) {
err.printStackTrace();
}
基本上,我只想编辑上面的代码,以创建一个命令行,该命令行可以实际检查exe,app或jar是否正在运行。也许有
cmd /c tasklist
和top -F -R -o cpu
的替代方法,它能够使所有进程在PC上运行,而不仅仅是.exe或.app 最佳答案
在Windows上,可以使用wmic
命令获取启动程序所使用的命令行参数。
例如,使用wmic process where "name like '%java%'" get commandline,processid
(基本上只是意味着“使用类似Java的名称来获取进程的PID和命令行参数”)为测试程序提供了以下输出:
616
“ C:\ Program Files \ Java \ jre1.8.0_111 \ bin \ javaw.exe” -jar“ A:\ Programmering \ Java \ Pong \ out \ artifacts \ Pong_jar \ Pong.jar”
如您所见,您可以获取正在运行的jar文件的位置(然后可以使用它来检查它是否是您的程序)。在这种情况下,我只是通过双击jar文件来启动它,如果以不同的方式启动它,则可能会得到不同的输出,但是总应该可以使用一些东西来标识java进程(例如主类或jar)文件)。