gpt4 book ai didi

java - 需要终止由 Runtime.getRuntime().exec() 启动的 Java 程序

转载 作者:行者123 更新时间:2023-11-30 03:56:54 25 4
gpt4 key购买 nike

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

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

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

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

感谢任何帮助!

最佳答案

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

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

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

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

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

关于java - 需要终止由 Runtime.getRuntime().exec() 启动的 Java 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22931602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com