栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Java中,确定使用运行时环境创建的进程是否已完成执行?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Java中,确定使用运行时环境创建的进程是否已完成执行?

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()
呼叫是一种症状,而不是疾病。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/438877.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号