Met*_*eta 5 java inputstream outputstream process
我有以下代码:
\nProcess 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}\nRun Code Online (Sandbox Code Playgroud)\n我试图找到一些来源来指示是否需要调用proc.destroy()\xc2\xa0(我应该isAlive()在调用 destroy 之前检查吗?),并手动关闭其输入/输出/错误流,但无济于事。据我所知,甚至官方文档也没有明确说明这一点。
当我完成生成的进程时,是否有必要执行这些操作,或者只是良好的做法?
\nprocess.destroyForcibly()调用finally 块是个好主意。waitFor如果进程在超时之前没有完成,则不会杀死该进程,因此在生成的进程无限期挂起的情况下,如果您不杀死它,那么它可能会永远保留。
另一个用例是假设您的进程需要大约 25 秒才能正常终止。假设您的线程在启动后几乎立即被中断。终止该进程可能比让它一直运行更好,因为结果永远不会被使用。
至于流,请参阅正确关闭 Java Process InputStream from getInputStream