有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在windows中通过端口查找PID并使用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”命令。有人能推荐我吗


共 (1) 个答案

  1. # 1 楼答案

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