如何获取执行中的PID Java进程?

时间:2020-11-06 18:34:04

标签: java process

我使用Java 8。 当我运行tomcat 8时(对于嵌入式Kafka和Zookeeper),我运行了4个Java进程。 如果tomcat崩溃,进程将不会与他关闭。 下次开始时,我需要找到进程并杀死后再运行。 如何找到4个PID激活的过程?

例如,这是linux中的列表

enter image description here

这是在Windows中

enter image description here

重要的是我只能找到这4个进程,而不关闭其他潜在的Java进程。

谢谢

编辑:

我这样解决了:

        InputStream stdin = null;
        if (isWindows)
            stdin = Runtime.getRuntime().exec("wmic process where \"CommandLine like '%kafka%'\" get ProcessID").getInputStream();
        else
        {
            stdin = Runtime.getRuntime().exec("ps -o pid,cmd -C java | awk '/kafka/ {print $1}'").getInputStream();

        }
        
        InputStreamReader isr = new InputStreamReader(stdin);
         BufferedReader br = new BufferedReader(isr);
         StringBuilder sb = new StringBuilder();
         String s;
         while ((s = br.readLine()) != null) {
          sb.append(s).append("\n");
         }
         String result = sb.toString().replaceAll("\\s{2,}", " ").trim();
         
         String[] pids = result.split(" ");
         for (String p: pids)
         {
             if (isANumber(p))
             {
                 //killa processo
                 SYS_MON.killProcess(Integer.parseInt(p));
                 System.out.print("kill process with PID: "+p);
             }
         }

我将此库添加到了pom.xml

 <dependency>
    <groupId>com.danielflower.apprunner</groupId>
    <artifactId>javasysmon</artifactId>
    <version>0.3.5.0</version>
 </dependency>

0 个答案:

没有答案