【问题标题】:Check if jar is running or not检查 jar 是否正在运行
【发布时间】:2017-08-01 20:38:51
【问题描述】:

我想检查我的 jar 是否在用户系统上运行,如果它关闭则重新启动。

我知道命令jps -l 可以检查当前运行的jar。唯一的问题是,要使该行正常工作,它需要用户安装 JDK。所以我想知道是否有与jps -l 行等效的行,它不需要JDK 或任何东西,只需检查特定的jar 是否正在运行。

在过去我也使用cmd /c tasklist for Windows 和top -F -R -o cpu for Mac。检查应用程序或 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 tasklisttop -F -R -o cpu的方法,它能够让所有进程在PC上运行,而不仅仅是.exe或.app

【问题讨论】:

    标签: java cmd jar terminal operating-system


    【解决方案1】:

    在 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文件)。

    【讨论】:

    • 非常感谢您的输入,我将查看它并尝试将其应用于我的代码中。我想知道你是否也知道类似的 Mac 方法?我的程序将在 Windows 和 Mac 上运行。
    • 我不是 Mac 用户,但快速的 google 搜索发现了这一点。可以试试吗?stackoverflow.com/questions/821837/…
    • 非常感谢,您自己的命令方法适用于 Windows 和 Mac 我设法使用您提供的链接创建了一个解决方法。
    猜你喜欢
    • 2013-12-08
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 2018-10-12
    • 2014-08-25
    • 1970-01-01
    相关资源
    最近更新 更多