0

我有很多进程正在运行

Runtime rt = Runtime.getRuntime();
int i=0;
int arg1;
while(i<10){
    arg1 = i+1;
    Process p = rt.exec("abc.exe "+ arg1);
    i++;
}

每个进程都以不同的参数值运行,这里 arg1 是该进程 abc.exe 的参数,我想检查所有这些进程是否正在运行或其中任何一个崩溃。如果发生崩溃,我想重新启动它。如何跟踪所有这些过程并定期检查它们是否崩溃?

我可以在 Linux 和 Windows 上追踪这个东西吗?阅读一些关于它的文章,但这一篇有点不同,因为它涉及多次出现并且只需要检查一些特定的过程......

4

2 回答 2

0

Runtime.exec(...)命令返回一个Process对象。您可以将Process对象放入集合中,然后使用该Process.exitValue()方法查看每个过程是否已完成。 如果进程仍在运行,则exitValue()抛出 a 。IllegalThreadStateException

所以你的代码可能是这样的:

List<Process> processes = new ArrayList<Process>();
// noticed I turned your while loop into a for loop
for (i = 0; i < 10 i++) {
    int arg1 = i + 1;
    Process p = rt.exec("abc.exe "+ arg1);
    processes.add(p);
}
...
// watch them to see if any of them has finished
// this can be done periodically in a thread
for (Process process : processes) {
   try {
       if (process.exitValue() != 0) {
           // it did not exit with a 0 so restart it
           ...
       }
   } catch (IllegalThreadStateException e) {
       // still running so we can ignore the exception
   }
}

我可以在 Linux 和 Windows 上追踪这个东西吗?

如果我理解这个问题,上面的代码应该可以在 Lunux 和 Windows 上运行。

于 2012-07-23T18:19:28.663 回答
0

使用 processbuilder,然后保留可以管理您启动的任何进程的进程 ID。Runtime.exec(...)应该为您需要执行的“一次性”命令保留。

于 2012-07-23T18:21:27.500 回答