3

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

4

1 回答 1

2

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();
}
于 2013-09-29T07:00:33.950 回答