Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否需要手动销毁并关闭java.lang.Process的开放流?_Java - Fatal编程技术网

是否需要手动销毁并关闭java.lang.Process的开放流?

是否需要手动销毁并关闭java.lang.Process的开放流?,java,Java,我有以下代码: Process proc; try { ProcessBuilder procBuilder = new ProcessBuilder(/* some args */); proc = procBuilder.start(); if (proc.waitFor(30000, TimeUnit.MILLISECONDS)) { //Etc... } else { //Handle it

我有以下代码:

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()
),并手动关闭其输入/输出/错误流,但没有用。据我所知,即使是官方文件也没有明确说明这一点


当我完成生成的进程时,执行这些操作是否有必要,甚至只是良好的实践?

最好在finally块中调用
process.destroy()
waitFor
如果进程没有在超时之前完成,则不会终止该进程,因此在生成的进程无限期挂起的情况下,如果不终止该进程,则它可能会永久保留

另一个用例是假设您的流程正常终止大约需要25秒。假设线程在启动后几乎立即中断。最好是终止进程,而不是让它一直运行,因为结果无论如何都不会被使用


至于流,请参见

,您当然应该关闭流程的输出流。否则,它可能会阻止在其
stdin
上等待流结束。如果进程生成输出,则需要对其执行一些操作。如果您不关心输出,请使用
procBuilder.inheritIO()(在启动进程之前)使其显示在与Java程序输出相同的位置。