Java 使用ProcessBuilder获取命令的输出在一段时间后挂起
我正在使用ProcessBuilder执行命令并获得输出。这很有效,但过了一段时间它就挂了,我看不出哪里出了问题。我希望看到一个最终的答案,用于使用ProcessBuilder执行命令,返回结果,而不会留下大量打开的文件描述符,最终导致命令挂起Java 使用ProcessBuilder获取命令的输出在一段时间后挂起,java,processbuilder,Java,Processbuilder,我正在使用ProcessBuilder执行命令并获得输出。这很有效,但过了一段时间它就挂了,我看不出哪里出了问题。我希望看到一个最终的答案,用于使用ProcessBuilder执行命令,返回结果,而不会留下大量打开的文件描述符,最终导致命令挂起 // Send command, get response public static String command(String cmd) { String out = "no response"; tr
// 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循环之后,它将正确地等待进程结束。我开始认为这段代码没有问题,相反,我的另一段程序占用了所有的文件描述符,这使得我无法运行我发出的命令。