0 java terminal operating-system cmd jar
我想检查我的 jar 是否正在用户系统上运行,如果关闭则重新启动。
我知道该命令jps -l可以检查当前正在运行的罐子。唯一的问题是,要使该行正常工作,需要用户安装 JDK。所以我当时想知道是否有与该行等效的jps -l行,它不需要 JDK 或任何东西,而只是检查特定的 jar 是否正在运行。
过去我也使用过cmd /c tasklistWindows 线和top -F -R -o cpuMac 线。检查应用程序或 exe 是否正在运行,但这似乎并没有真正起作用。当tasklist我在 Windows 上运行该行然后检查名为“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();
}
Run Code Online (Sandbox Code Playgroud)
基本上我想编辑上面的代码,有一个命令行,它能够实际检查 exe、app 或 jar 是否正在运行。也许有一个替代方案cmd /c tasklistand top -F -R -o cpu,它能够让所有进程在电脑上运行,而不仅仅是 .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文件)。