如何验证外部进程是否异常终止?

时间:2017-03-28 08:42:19

标签: java exception processbuilder

以下代码段运行外部进程:

ProcessBuilder pb = new ProcessBuilder("C:\\Program Files\\Java\\jdk1.8.0_111\\bin\\java.exe", 
                "-cp",
                "D:\\nsd-rest\\target\\classes",
                "com.dataart.ExternalProcess"); //java -cp D:\nsd-rest\target\classes my.package.ExternalProcess
Process process = pb.start();
System.out.println(process.waitFor(10, TimeUnit.SECONDS)); // prints true

外部流程如下所示:

public class ExternalProcess {
    public static void main(String[] args) { 
       throw new RuntimeException();
    }
}

尽管来自外部进程的异常抛出,第一个代码段仍然显示为真。

有没有办法验证过程是否异常完成?

1 个答案:

答案 0 :(得分:2)

来自Process#waitFor(long timeout, TimeUnit unit) Javadoc

  

返回:       如果子进程已退出,则返回true;如果在退出子进程之前等待时间已过,则返回false。

您可以使用Process#exitValue()来检索退出值,并检查它是否为!= 0

  

返回:       此Process对象表示的子进程的退出值。按照惯例,值0表示正常终止。