检查罐子是否在运行

时间:2017-03-11 14:27:16

标签: java cmd jar terminal operating-system

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

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

过去我也使用了行cmd /c tasklist用于Windows,行top -F -R -o cpu用于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

1 个答案:

答案 0 :(得分:1)

在Windows上,您可以使用wmic命令获取程序启动时的命令行参数。

例如,使用wmic process where "name like '%java%'" get commandline,processid(基本上只是意味着"获取具有类似java&#34的名称的进程的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文件)。