我有一个Java进程,使用Runtime.getRuntime().exec("myBin")启动程序
"myBin"可能会分叉多次才能完成其工作。
我有一个读取器线程,从Process对象的InputStream和ErrorStream中读取“myBin”及其子进程的所有输出。
我的问题是:如果它花费太多时间来完成工作,我需要杀死该进程并等待读取器线程完成。(如果读取器线程已读取EOF,则会完成)
现在我发现,即使我使用Process.Destroy(),我只能杀死“myBin”,而不能杀死它本身和所有子进程。因此,在超时后,EOF永远不会到达,因此读取器线程挂起直到所有子进程终止...
是否有一种方法可以安全地杀死由Runtime.exec()启动的进程和所有子进程?
我在Linux上,跨平台不在我的考虑范围内。