如何通过Windows中的端口findPID,并杀死使用Java发现的任务

我需要通过进程端口在java代码中杀死进程。 我可以在cmd中手动执行:

C:\>netstat -a -n -o | findstr :6543 TCP 0.0.0.0:6543 0.0.0.0:0 LISTENING 1145 TCP [::]:6543 [::]:0 LISTENING 1145 C:\>taskkill /F /PID 1145 

在Java中,我可以执行cmd命令,如:

 ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", "netstat -a -n -o | findstr :6543"); 

但我不知道如何得到PID作为netstat的输出,并将其传输到“taskkill”命令。 有人可以build议我吗?

Solutions Collecting From Web of "如何通过Windows中的端口findPID,并杀死使用Java发现的任务"

您可以执行ProcessBuilder并从输入流获取响应。

示例代码:

 public static void main(String[] args) throws IOException, InterruptedException { ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/C", "netstat -n -o | findstr :6129"); Process process = builder.start(); process.waitFor(); printProcessStream(process.getInputStream()); } private static void printProcessStream(InputStream inputStream) throws IOException { int bytesRead = -1; byte[] bytes = new byte[1024]; String output = ""; while((bytesRead = inputStream.read(bytes)) > -1){ output = output + new String(bytes, 0, bytesRead); } System.out.println(" The netstat command response is \r\n"+output); } 

netstat的“-a”参数会导致Process Builder无限期地等待。 你将需要删除。 此外,如果您需要获取错误流,则可以添加以下内容。

 printProcessStream(process.getErrorStream()); 

一旦获得响应流,就可以解析数据并识别要杀死的PID。 随后可以使用类似的逻辑,但改变命令,而不是netstat,你可以使用命令“kill -9 $ PID”来终止进程。