我想检查一罐我的罐子是否在用户系统上运行,然后重新启动它(如果它已关闭)。

我知道命令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 tasklisttop -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)文件)。

07-26 06:23
查看更多