Java—读取进程的输出

Java—读取进程的输出,java,process,output,Java,Process,Output,我有密码 Process core = pb.start(); if(!core.waitFor(3, TimeUnit.HOURS)) { System.out.println("Process destroyed, path " + root.getAbsolutePath()); core.destroy(); } String output = IOUtils.toString(core.getInputStream()); return output; 它必须运行工作

我有密码

Process core = pb.start();
if(!core.waitFor(3, TimeUnit.HOURS))
{
    System.out.println("Process destroyed, path " + root.getAbsolutePath());
    core.destroy();
}
String output = IOUtils.toString(core.getInputStream());
return output;
它必须运行工作时间不超过3小时的进程。如果它更有效,则应该销毁此进程,但无论如何都必须收集所有生成的日志。 我认为这是一个正确的代码,但今天我看到它停在
IOUtils.toString(core.getInputStream())
行上,因为我认为它在调用destroy()并继续工作后不会被销毁,而IOUtils.toString正在等待它完成工作。
请告知如何做到这一点,谢谢

您使用的是什么版本的Java?启动进程非常依赖于操作系统,但我要说的是,假设在调用
Process.destroy()后InputStream将继续存在是不安全的。此外,InputStream是一个管道流,在大多数操作系统中,它有一个有限大小的缓冲区,这意味着只要进程存在,您就需要一直从中读取,否则进程将阻塞,因为它无法向管道发送更多的输出。通过启动一个单独的线程来读取数据,这是最容易和安全的方法。@chokdee,Windows8上的Java8。1@ErwinBolwidt,谢谢,我会尽量用这两种方法来做。因此,线程应该继续读取,当它收到通知时,读取应该停止,进程+线程应该销毁?