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

Java 如何验证外部进程是否异常终止?,java,exception,processbuilder,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-res

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

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();
    }
}
尽管外部进程发出异常,但第一个代码段打印为true

是否有方法验证流程是否异常完成?

来自

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

您可以使用检索退出值,并检查它是否为
!=0

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

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

您可以使用检索退出值,并检查它是否为
!=0

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

如果阅读,则说明
waitFor
返回“如果子流程退出前等待时间已过,则返回false”。这与执行过程中的问题无关。进一步:问题是“异常完成”的定义完全取决于该过程。异常可能使它看起来像一个错误,但进程本身(此处使用的jvm)正确地执行了字节码。因此,它正常终止。如果读取,它会声明
waitFor
返回“如果子进程退出前等待时间已过,则返回false”。这与执行过程中的问题无关。进一步:问题是“异常完成”的定义完全取决于该过程。异常可能使它看起来像一个错误,但进程本身(此处使用的jvm)正确地执行了字节码。因此,它正常终止。