在 Java 代码中,应该使用 ProcessBuilder 类来运行外部命令。然而,有时候在 Linux 系统上,ProcessBuilder 会偶尔挂起并停止执行命令。这个问题可能是由于命令行需求过程中产生了由于缓冲区问题引起的阻塞导致的。
为了解决这个问题,我们可以修改代码如下:
ProcessBuilder pb = new ProcessBuilder(command);
pb.redirectErrorStream(true);
Process process = pb.start();
// create a buffer reader and output the response
StringBuilder out = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
while ((line = br.readLine()) != null) {
out.append(line + "\n");
String response = out.toString();
// Wait for the command to finish and then destroy the process
int exitCode = process.waitFor();
process.destroy();
这段代码使用一个 while 循环来读取命令输出,并且在完成后等待命令结束。这个解决方案可以解决 ProcessBuilder 以及其他外部进程相关的缓冲区问题,并且在代码中进行了适当的错误处理。