我的 Intel MPI 版本是 impi/5.0.2.044/intel64 安装在 RHEL 机器上。
我正在使用 java 使用以下代码调用 MPI 程序:
ProcessBuilder builder = new ProcessBuilder();
builder.command("mpirun ./myProgram");
builder.redirectError(Redirect.to(new File("stderr")));
builder.redirectOutput(Redirect.to(new File("stdout")));
Process p = null;
try {
p = builder.start();
} catch (IOException e) {
e.printStackTrace();
}
// Process has started here
p.destroy();
try {
// i = 143
int i = p.exitValue();
} catch( IllegalThreadStateException e){
}
但是即使在exitValue()
没有抛出异常的情况下已知,ps aux
仍然显示一堆./myProgram
,并且程序仍在写入结果文件,就好像它没有被杀死一样,只有在完成所有计算后才会终止。
目前,我发现成功终止的唯一方法./myProgram
是Ctrl+C
将控制台中使用的 java 终止到 java 程序。
我的意图是立即停止计算,让 java 程序安排一些其他的计算。是否有任何解决方法可以强制所有 mpi 实例终止,或者至少保证在小而明确的时间内(例如 30 秒或 1 分钟的轮询)终止?