以下代码段运行外部进程:
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();
}
}
尽管来自外部进程的异常抛出,第一个代码段仍然显示为真。
有没有办法验证过程是否异常完成?
答案 0 :(得分:2)
来自Process#waitFor(long timeout, TimeUnit unit) Javadoc
返回: 如果子进程已退出,则返回true;如果在退出子进程之前等待时间已过,则返回false。
您可以使用Process#exitValue()来检索退出值,并检查它是否为!= 0
返回: 此Process对象表示的子进程的退出值。按照惯例,值0表示正常终止。