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