0

我正在尝试在我的 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();  

谢谢!

4

1 回答 1

1

我怀疑输入文件越大,该过程会产生更多的输出。

当 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();
}
于 2013-04-18T08:31:11.163 回答