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

Met*_*eta 5 java inputstream outputstream process

我有以下代码:

\n
Process proc;\ntry\n{\n    ProcessBuilder procBuilder = new ProcessBuilder(/* some args */);\n    proc = procBuilder.start();\n    if (proc.waitFor(30000, TimeUnit.MILLISECONDS))\n    {\n        //Etc...\n    }\n    else\n    {\n        //Handle it\n    }\n}\ncatch (InterruptedException ie)\n{\n    currentThread().interrupt();\n}\nfinally\n{\n    //What goes here?\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我试图找到一些来源来指示是否需要调用proc.destroy()\xc2\xa0(我应该isAlive()在调用 destroy 之前检查吗?),并手动关闭其输入/输出/错误流,但无济于事。据我所知,甚至官方文档也没有明确说明这一点。

\n

当我完成生成的进程时,是否有必要执行这些操作,或者只是良好的做法?

\n

Mic*_*ael 4

process.destroyForcibly()调用finally 块是个好主意。waitFor如果进程在超时之前没有完成,则不会杀死该进程,因此在生成的进程无限期挂起的情况下,如果您不杀死它,那么它可能会永远保留。

另一个用例是假设您的进程需要大约 25 秒才能正常终止。假设您的线程在启动后几乎立即被中断。终止该进程可能比让它一直运行更好,因为结果永远不会被使用。

至于流,请参阅正确关闭 Java Process InputStream from getInputStream