如果您的外部流程期望某些事情
stdin,您必须关闭
getOutputStream。否则,你将
waitFor永远。
这是JavaWorld 的“
何时Runtime.exec()不会提供”一文,其中描述了exec方法的不同陷阱以及如何避免它们。
根据我的经验,最好先消耗子进程的STDOUT和STDERR(直到它们退出EOF),然后再进行阻塞
waitFor。希望在这一点上您不必等待很长时间。
Kaleb问题的答案。在正常情况下,您不应该关闭流,但是由于存在这种情况,
waitingFor并且由于某种原因它没有超时,如果在输出中遇到某些错误情况并且不想处理子级的流,则可能需要关闭这些流。进一步输出。但是,子程序在另一端关闭STDOUT或STDERR管道时是否终止(崩溃)完全取决于该子程序的实现。但是,大多数Shell程序将在这种情况下终止。
我确实希望
waitFor有一些有意义的超时,并且
Process在您决定放弃对其进行监视时,有一种记录化的清理资源的方法。



