如何了解在 Java 中使用 Process Builder/Runtime 调用的进程是否已完成其执行



在Java中,我使用Process builder在shell上触发了一个命令,在触发该命令后,我想知道它的进度是否完整。如果调用的进程花费了太多时间,我想在一定的时间限制后杀死该进程。例如,如果进程执行时间超过 5 秒,我想杀死该后端进程,如果它在 5 秒内完成,我想继续使用该后端进程的输出。在python中,有一个名为returncode的类变量,它最初为null,然后在进程完成执行后变为0,我可以继续检查该值,如果它在5秒后为null,我可以简单地杀死该进程。如何在 Java 中做同样的事情?

如果进程尚未终止,方法 Process#exitValue() 将引发异常。

您可以启动该过程,休眠 5 秒钟并调用 exitValue() 。如果您得到IllegalThreadStateException则表示该进程仍在运行,您可以使用destroy()方法杀死它:

Process p = ...
try {
    Thread.sleep(5 * 1000);
    int exitValue = p.exitValue();
    // get the process results here
} catch (IllegalThreadStateException e) {
    // process hasn't terminated in 5 sec
    p.destroy();
}

相关内容

最新更新