在Java程序中,我使用以下命令运行另一个Java程序:
Process p = Runtime.getRuntime().exec("echo.bat | java -Xms64M -Xmx1G -cp "+execFilePath+" "+inputFileName+" "+inputParam);
调用工作正常,但是如果由于编码错误而导致执行的Java文件(inputFileName
)挂起,比如说,由于某些无限循环,一个刚开始的新进程并没有结束。现在,我需要在我的代码中杀死该进程。
我可以使用TimeOut检测Java程序是否挂起。但是,我不知道如何获取此执行的Java程序的进程ID并在TimeOut发生时终止它。
感谢任何帮助!
答案 0 :(得分:2)
通常,您可以在Process实例上调用destroy
。见here
但是我注意到你正在启动一个进程并将其输出传递给另一个进程。最简单的方法最有可能只会杀死前者(你的echo.bat
过程)。
因此,您需要一个更复杂的场景。执行以下操作:
echo.bat
Process.getOutputStream()
)Process.getInputStream()
)如上所述 fge ,请查看ProcessBuilder,因为它简化了一些步骤。特别是设置输入流可以在实际启动程序之前完成