【发布时间】:2020-10-20 03:37:21
【问题描述】:
我有以下代码:
Process proc;
try
{
ProcessBuilder procBuilder = new ProcessBuilder(/* some args */);
proc = procBuilder.start();
if (proc.waitFor(30000, TimeUnit.MILLISECONDS))
{
//Etc...
}
else
{
//Handle it
}
}
catch (InterruptedException ie)
{
currentThread().interrupt();
}
finally
{
//What goes here?
}
我试图找到一些表明是否需要调用 proc.destroy() 的来源(我应该在调用 destroy 之前检查 isAlive() 吗?),并手动关闭其输入/输出/错误流,但无济于事。据我所知,即使是官方文档也没有说明这一点。
当我完成生成的进程后执行这些操作是否有必要,甚至只是一种良好的做法?
【问题讨论】:
-
您当然应该关闭进程的输出流。否则它可能会阻止在其
stdin上等待流结束。 -
如果进程产生输出,你需要对它做一些事情。如果您不关心输出,请使用
procBuilder.inheritIO();(在启动进程之前)使其与您的 Java 程序的输出出现在同一位置。
标签: java process inputstream outputstream