我正在尝试在我的 java 代码中执行“edena”生物信息程序。 该过程使用输入文件并写入输出文件。 当输入文件很小(~1 MB)时,该过程会完美完成并退出。 当输入文件较大(~ 80 MB)时,进程就会挂起。 从 cmd 调用该进程工作得很好,所以我怀疑它与缓冲区等有关。 我正在使用 4GB RAM 的 ubuntu 12.04.10(不知道是否相关)。 这是挂起的代码:
String edena_exe1 = "edena -M 75 -p " + workshopDir + BinAssembly.cliqueFilesDir +
"clique_" + c.getId() + " -DRpairs "+ workshopDir + BinAssembly.cliqueFilesDir +
"/clique" + c.getId() + "pair1.fna " + workshopDir +
BinAssembly.cliqueFilesDir + "/clique" + c.getId() + "pair2.fna ";
Process edena_proc1 = Runtime.getRuntime().exec(edena_exe1);
edena_proc1.waitFor();
谢谢!
最佳答案
我怀疑输入文件越大,该过程会生成更多输出。
当 JVM 启动进程时,它会获得有限的缓冲流用于输出。如果您在进程运行时不释放该流,它最终可能会被填满并阻塞。
private static void dir() throws IOException {
Runtime r = Runtime.getRuntime();
Process p = r.exec("DIR C:\\ /S");
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
try {
String line;
// Bleed the output.
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} finally {
br.close();
}
// Just in case.
p.destroy();
}
关于java 进程在启动使用该文件系统的可执行文件时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16077356/