【发布时间】:2011-09-27 22:31:32
【问题描述】:
我有一个 Java 进程,它使用 Runtime.getRuntime().exec("myBin") 启动程序
这个“myBin”可能会分叉几次来完成它的工作。
我有一个阅读器线程从 exec() 返回的 Process 对象的 InputStream 和 ErrorStream 中读取“myBin”及其子项的所有输出
我的问题是:如果完成这项工作花费了太多时间,我需要终止进程并等待阅读器线程完成。(如果阅读器线程已读取 EOF,它将完成)
现在我发现,即使我使用 Process.Destroy(),我也只能杀死“myBin”本身及其所有子项。所以超时后,EOF 永远不会到达,所以读取线程挂起,直到所有子进程终止...
有没有办法安全地杀死由 Runtime.exec() 启动的进程和所有子进程
我在 Linux 上,跨平台不在我的考虑范围内。
【问题讨论】: