java进程在启动使用文件系统的可执行文件时挂起

java进程在启动使用文件系统的可执行文件时挂起,java,process,Java,Process,我试图在java代码中执行“edena”生物信息程序。 该过程使用输入文件并写入输出文件。 当输入文件很小(~1MB)时,进程将完美完成并退出。 当输入文件较大(约80MB)时,进程将挂起。 从cmd调用该进程工作得很好,所以我怀疑它与缓冲区等有关。。 我正在使用4GB内存开发ubuntu 12.04.10(不知道是否相关)。 这是代码挂起: String edena_exe1 = "edena -M 75 -p " + workshopDir + BinAssembly.cliqueFiles

我试图在java代码中执行“edena”生物信息程序。 该过程使用输入文件并写入输出文件。 当输入文件很小(~1MB)时,进程将完美完成并退出。 当输入文件较大(约80MB)时,进程将挂起。 从cmd调用该进程工作得很好,所以我怀疑它与缓冲区等有关。。 我正在使用4GB内存开发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();
}

您是否尝试在javaJust挂起之外运行该命令?没有例外?这看起来很容易犯一个小错误。您是否尝试在
exec
之前打印出
edena_exe1
,以查看它是否与有效的命令行命令完全匹配?