需要杀死Runtime.getRuntime()。exec()启动的Java程序

时间:2014-04-08 08:29:35

标签: java command-line runtime.exec hang

在Java程序中,我使用以下命令运行另一个Java程序:

Process p = Runtime.getRuntime().exec("echo.bat | java -Xms64M -Xmx1G -cp "+execFilePath+" "+inputFileName+" "+inputParam); 

调用工作正常,但是如果由于编码错误而导致执行的Java文件(inputFileName)挂起,比如说,由于某些无限循环,一个刚开始的新进程并没有结束。现在,我需要在我的代码中杀死该进程。

我可以使用TimeOut检测Java程序是否挂起。但是,我不知道如何获取此执行的Java程序的进程ID并在TimeOut发生时终止它。

感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

通常,您可以在Process实例上调用destroy。见here

但是我注意到你正在启动一个进程并将其输出传递给另一个进程。最简单的方法最有可能只会杀死前者(你的echo.bat过程)。

因此,您需要一个更复杂的场景。执行以下操作:

  1. 启动仅调用echo.bat
  2. 的流程
  3. 等到它完成
  4. 通过其输出流(Process.getOutputStream()
  5. 读取其所有输出
  6. 启动另一个进程,仅调用java程序。
  7. 将读取数据写入其输入(写入Process.getInputStream()
  8. 第二个流程实例将是您的java流程
  9. 如上所述 fge ,请查看ProcessBuilder,因为它简化了一些步骤。特别是设置输入流可以在实际启动程序之前完成