首页 > 解决方案 > 如何通过端口获取tomcat进程ID并结束该进程

问题描述

根据下面的代码,我正在尝试通过端口获取 tomcat 进程 ID 并结束该进程。我在 CMD 中得到这个命令是有效的,但习惯于 java 不起作用。我想纠正方法请帮助我

try {
   Runtime rt = Runtime.getRuntime();
   Process proc = rt.exec("netstat -aon | find /i \"listening\"");
   InputStream stdin = proc.getInputStream();
   InputStreamReader isr = new InputStreamReader(stdin);
   BufferedReader br = new BufferedReader(isr);
   String line = null;
   System.out.println("<OUTPUT>");

    while ( (line = br.readLine()) != null)
       System.out.println(line);

       System.out.println("</OUTPUT>");
       int exitVal = proc.waitFor();
       System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t) {
      t.printStackTrace();
  }

标签: javacmdcommand

解决方案


如果你使用的是windows,它会是这样的。我没有针对 linux 进行测试,但我认为如果您检查注释代码,它应该可以工作。

 public static void main(String[] args) throws IOException, InterruptedException {
        try {
            Runtime rt = Runtime.getRuntime();
            Process proc = rt.exec("cmd /c netstat -ano | findstr 8080");
            //for linux
            //Process proc = rt.exec("/bin/bash -c netstat -ano |grep 8080");

            BufferedReader bufferedReader = new BufferedReader(new
                    InputStreamReader(proc.getInputStream()));
            String line = null;
            System.out.println("<OUTPUT>");
            if ((line = bufferedReader.readLine()) != null) {
                int processIdString = line.lastIndexOf(" ");
                String processId = line.substring(processIdString, line.length());
                System.out.println("Your process Id to Kill : " + processId);
                rt.exec("cmd /c Taskkill /PID" + processId + " /T /F");
                //for linux
                //rt.exec("/bin/bash -c kill -9 "+processId);

            }
            System.out.println("<OUTPUT>");
        } catch (Exception e) {
            System.out.println("Error Occured");
        }
    }

推荐阅读