以下是我的问题的剪辑代码:
Process process = Runtime.getRuntime().exec(command);
if (process.waitFor() != 0)
throw new Exception("error");
reader =
new BufferedReader(new InputStreamReader(process.getInputStream()));
正在运行的过程正在产生巨大的输出。如果我将输出重定向到文件,则该过程会更快地终止,然后在屏幕上打印输出(标准输出)。 由于磁盘性能低,文件系统权限等原因,我不希望将输出重定向到文件。
当执行process.waitFor()时,Java被阻塞,直到进程(被调用者)终止,这可能需要很长时间。因此,为了绕过这个问题,我想将进程的标准输出重定向到读者的流输入(代码的最后一行)。即,被叫方应该向与阅读器链接的流产生输出,而不是在屏幕上打印输出。
希望我足够清楚。我想知道我该怎么做?任何帮助都会很棒。
答案 0 :(得分:1)
如果您不关心进程的输出,只需重定向到Unix上的> /dev/null
或Windows上的> NUL
的空设备。所有输出都将被丢弃,您不必担心文件权限,性能等。
如果您关心输出,请查看this post,其中显示了使用StreamGobbler
读取流程的stdout / stderr的正确方法。
答案 1 :(得分:0)
您需要在调用waitFor()之前读取输出。在你等待它完成的那一刻,它只能在它完成输出时才会这样做,这是因为你没有读取输出而无法做到这一点,所以它的缓冲区已满并且它正在阻塞。