如何在windows中通过端口查找PID并使用java杀死已找到的任务

如何在windows中通过端口查找PID并使用java杀死已找到的任务,java,windows,pid,netstat,Java,Windows,Pid,Netstat,我需要通过进程端口在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

我需要通过进程端口在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”命令。有人可以推荐我吗?

您可以执行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”最终终止进程。

您可以通过
-b
开关获得拥有每个端口的进程或文件(无法准确调用)。这是进一步的一步。