java进程在启动使用文件系统的可执行文件时挂起
我试图在java代码中执行“edena”生物信息程序。 该过程使用输入文件并写入输出文件。 当输入文件很小(~1MB)时,进程将完美完成并退出。 当输入文件较大(约80MB)时,进程将挂起。 从cmd调用该进程工作得很好,所以我怀疑它与缓冲区等有关。。 我正在使用4GB内存开发ubuntu 12.04.10(不知道是否相关)。 这是代码挂起: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
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
,以查看它是否与有效的命令行命令完全匹配?