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

标签 java process

我正在尝试在我的 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/

相关文章:

java - 从变量创建数组

Java 错误(?): Argument getName() changes when passing parameters

java - 添加从列表返回的元素

C#:如何直接在 java.exe 中执行此命令行?

windows - 程序如何删除自己的可执行文件

python - 在 Python 中产生和等待子进程

具有并发输入/输出流的 Java 进程

java - 从 java socket(TCP) 读取 19000 字节

java - 在Java中获取主机名的推荐方法

c# - 从 C# 在同一环境中执行多个命令