我有许多正在运行的流程
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上追踪这个东西吗?阅读一些关于它的文章,但这个文章有点不同,因为它涉及多次出现,只能检查一些特定的过程......
答案 0 :(得分:0)
Runtime.exec(...)
命令返回Process
个对象。您可以将Process
个对象放入集合中,然后使用Process.exitValue()
方法查看每个进程是否已完成。如果进程仍在运行,则exitValue()
会抛出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。
答案 1 :(得分:0)
使用流程构建器,然后保留流程ID,您可以使用该ID来管理您启动的任何流程。 Runtime.exec(...)
应保留为您需要执行的“一次性”命令。