在windows上开发微服务工程,有时重新启工程端口号总是没关闭需求查找对应的端口号和杀死进程比较麻烦,今天索性就利用java写一个 主类,填写端口号就能直接查找对应端口和进程号,自动关闭端口.类似windows下如下两个命令:
taskkill -pid 15408 -f
代码如下,喜欢的同学拿去:
package org.example; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; //windows关闭和杀死对应端口 public class CmdExecExample { public final static String closePort="9527"; //要关闭的端口 public static void closePort(String port) { String cmd="taskkill -pid "+port+" -f"; try { // 调用CMD命令 ProcessBuilder processBuilder = new ProcessBuilder("cmd.exe", "/c", cmd); // /c参数表示执行后关闭CMD窗口 processBuilder.redirectErrorStream(true); // 将错误输出流与标准输出流合并 Process process = processBuilder.start(); // 获取命令输出结果 InputStream inputStream = process.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "GBK")); // 设置编码为GBK String line; while ((line = reader.readLine()) != null) { System.out.println(line); } // 等待命令执行完成 process.waitFor(); } catch (IOException | InterruptedException e) { e.printStackTrace(); } } public static void main(String[] args) { try { // 调用CMD命令 ProcessBuilder processBuilder = new ProcessBuilder("cmd.exe", "/c", "netstat -aon|findstr "+closePort); // /c参数表示执行后关闭CMD窗口 processBuilder.redirectErrorStream(true); // 将错误输出流与标准输出流合并 Process process = processBuilder.start(); // 获取命令输出结果 InputStream inputStream = process.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "GBK")); // 设置编码为GBK String line; while ((line = reader.readLine()) != null) { String wordToFind = "LISTENING"; String dealStr=line.trim().replace(" ",""); dealStr=dealStr.trim(); int index = dealStr.indexOf(wordToFind); if (index == -1) { System.out.println("Word not found."); } else { System.out.println("Word found at index: " + index); String realStr= dealStr.substring(index); String cport=realStr.replace("LISTENING","").trim(); System.out.println("端口号:"+cport); closePort(cport); } System.out.println(dealStr); System.out.println(line); break; } // 等待命令执行完成 process.waitFor(); } catch (IOException | InterruptedException e) { e.printStackTrace(); } } }
直接运行就可以了