2013-04-18 32 views
0

我試圖在我的java代碼中執行'edena'生物信息程序。 該過程使用輸入文件並寫入輸出文件。 當輸入文件很小(〜1 MB)時,該過程完成並完全退出。 當輸入文件較大(〜80 MB)時,該進程只是掛起。 從cmd調用進程工作得很好,所以我懷疑它與緩衝區等有關。 我正在使用4GB RAM的Ubuntu 12.04.10(不知道它是否相關)。 這是吊碼:Java進程在啓動使用文件系統的可執行文件時掛起

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(); 

謝謝!

+0

你試過在java之外運行命令嗎 – aymankoo

+0

只是掛起?沒有例外? –

+0

這看起來很容易犯一個小錯誤。你是否嘗試在'exec'之前打印'edena_exe1',看看它是否與命令行命令完全匹配? – Dukeling

回答

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(); 
} 
相關問題