有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

命令行需要终止运行时启动的Java程序。getRuntime()。行政长官()

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

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

调用工作正常,但是如果由于编码错误,执行的Java文件(inputFileName)挂起,比如说,由于某个无限循环,启动的新进程不会结束。现在,我需要在我的代码中终止这个进程

我可以通过超时来检测Java程序是否挂起。但是,我不知道如何获取这个已执行Java程序的进程id,并在超时发生时终止它

感谢您的帮助


共 (1) 个答案

  1. # 1 楼答案

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

    然而,我注意到您正在启动一个进程,并将其输出传递到另一个进程。简单的方法很可能只杀死前者(您的echo.bat进程)

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

    1. 启动仅调用echo.bat的进程
    2. 等到它完成
    3. 通过其输出流读取其所有输出(Process.getOutputStream()
    4. 启动另一个进程,只调用java程序
    5. 将读取的数据写入其输入(写入Process.getInputStream()
    6. 第二个流程实例将是您的java流程

    正如上面提到的fge一样,看看ProcessBuilder,因为它简化了一些步骤。特别是设置输入流可以在实际启动程序之前完成