Java 使用ProcessBuilder获取命令的输出在一段时间后挂起

Java 使用ProcessBuilder获取命令的输出在一段时间后挂起,java,processbuilder,Java,Processbuilder,我正在使用ProcessBuilder执行命令并获得输出。这很有效,但过了一段时间它就挂了,我看不出哪里出了问题。我希望看到一个最终的答案,用于使用ProcessBuilder执行命令,返回结果,而不会留下大量打开的文件描述符,最终导致命令挂起 // Send command, get response public static String command(String cmd) { String out = "no response"; tr

我正在使用ProcessBuilder执行命令并获得输出。这很有效,但过了一段时间它就挂了,我看不出哪里出了问题。我希望看到一个最终的答案,用于使用ProcessBuilder执行命令,返回结果,而不会留下大量打开的文件描述符,最终导致命令挂起

    // Send command, get response
    public static String command(String cmd) {
        String out = "no response";
        try {
            ProcessBuilder pb = new ProcessBuilder("/system/bin/sh", "-c", cmd);
            pb.redirectErrorStream(true);
            Process process = pb.start();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            StringBuilder response=new StringBuilder();
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                response.append(line + "\n");
            }
            bufferedReader.close();
            if (response.toString().length() > 0) {
                out = response.toString().trim();
            }
        } 
        catch (IOException e) {
            out = "Error: "+ e.toString();
        } 
        return out;
    }

它没有等待输入?您确定在java外部运行此命令会打印结果吗?我发送给它的命令类似于“ifconfig usbnet0”。结果立即打印出来,所以我不认为我必须使用线程来处理结果。启动后,在前4或5次运行中,一切都很好,我得到的结果没有问题,但随后命令开始挂起,这导致我的整个java程序的其余部分根本无法执行。@ChrisH。添加“process.waitFor();”怎么样在while循环之后,它将正确地等待进程结束。我开始认为这段代码没有问题,相反,我的另一段程序占用了所有的文件描述符,这使得我无法运行我发出的命令。