Process.waitFor()(javadoc)
应该 可以。如果不起作用,则:
JVM或OS中存在错误(这种情况 极不可能 发生),或者
关于该进程和/或您的Java代码的某些信息意味着该进程 不会 退出。
在当前的Java版本中,您也可以使用
Process.isAlive(javadoc)测试进程状态,而不会阻塞直到进程完成。对于Java
7和更早的版本,有一个hacky解决方案,它需要轮询进程返回代码并捕获异常,但这效率很低。您应该尽快升级到Java 8或更高版本!
任务完成后,将无限期等待。(我不知道为什么)。
如果这个情况发生,则两个
waitFor()或
isAlive()会有所帮助。
从Java启动的进程不会/无法退出的最可能原因是:
该进程被阻塞,等待您的Java应用程序(通过其stdin)为其提供一些输入,
该进程被阻塞,等待您的Java应用程序读取其输出(即,其stdout或stderr),
等待某个外部事件被阻止;例如,如果它试图与没有响应的远程服务器通信,
某些东西向它发送了STOP信号,或者
只是需要很 短的 时间才能运行。
这些原因中的前两个可以通过(分别)关闭连接到其标准输入的Java输出流并读取(并可能丢弃)连接到其标准输出和标准错误的Java输入流来解决。其他原因很棘手,您唯一的选择是“等待”或尝试终止该过程。
底线-您需要找出流程未完成的原因。被阻止的
Process.waitFor()呼叫是一种症状,而不是疾病。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)