我正在尝试编写一个小工具,如果它们已被终止,则会重新启动一定数量的jar。
private static void checkAndRestartProcesses() {
for ( int i=0; i<processes.size(); i++ ) {
try {
processes.get(i).exitValue();
processes.remove(i);
} catch (IllegalThreadStateException ex) {
}
}
try {
for ( int i=processes.size(); i<Config.NR_PROCESSES; i++ ) {
ProcessBuilder pb = new ProcessBuilder("cmd", "/c start cmd /c java -jar bla.jar");
Process p = pb.start();
processes.add(p);
}
} catch (IOException ex) {
}
}
问题是以“cmd start”开始的进程在执行子进程后立即退出(因此,没有IllegalThreadStateException)。 如何跟踪子流程(是否终止)? 或者:如何在不使用“cmd start”的情况下在单独的cmd中启动子流程。 我需要将已启动的例程放在新的cmd中。
提前多多感谢。
答案 0 :(得分:1)
您需要在开始时使用/ wait标志
cmd /c start /wait java -jar bla.jar