2012-08-16 57 views
0

我想写一个小工具,重新启动一定数量的jar,如果它们已被终止。如何知道以“cmd start”开头的进程的状态?

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启动”退出之后,他们执行的子过程(因此,不存在IllegalThreadStateException)。 我如何跟踪子进程(无论它们是否被终止)? 或者:如何在不使用“cmd start”的情况下在单独的cmd中启动子进程? 我需要启动的例程在新的cmd中。

非常感谢。

+1

为什么你使用'CMD使用/等待标志在启动/ C开始'的___在这里,而不是''___? – 2012-08-16 22:20:57

+0

我想为每个进程都有一个独立的cmd窗口。 – dotwin 2012-08-16 22:25:50

回答

1

你需要

cmd /c start /wait java -jar bla.jar 
+0

这是真棒...正是我想知道的。谢谢你吨。 – dotwin 2012-08-16 22:55:58