【发布时间】:2019-01-27 09:11:51
【问题描述】:
下面的程序会使用 2 个不同的 JVM 吗?一个用于主程序,一个用于Sample.jar程序?
public class Hello {
public static void main(String args[]) throws Exception {
Thread.sleep(5000);
System.out.println("will exec now");
Process p = Runtime.getRuntime().exec("java -jar Sample.jar");
while (p.isAlive()) {
Thread.sleep(5000);
System.out.println("still alive");
}
System.out.println("Done !!");
}
}
【问题讨论】:
-
那是启动一个不同的进程,一个单独的 JVM。
-
附带说明,这段代码可能会导致死锁,因为
Runtime.exec在两个进程之间建立了管道,所以当子进程期望输入或产生的输出超过管道缓冲区可以存储时,它会永远挂着。如果您不想处理子流程的输入和输出,可以使用Process p = new ProcessBuilder("java", "-jar", "Sample.jar").inheritIO().start();将其重定向到父通道