2012-07-22 79 views
1

我正在開發一個Web應用程序,其中我使用Java作爲我的前端,並將shell用作我的後端。我在shell中處理很多文件..例如,如果我必須處理100個文件。我計劃從Java應用程序產生4個子進程。我讀了關於process Builder的內容。但是我沒有清楚地知道如何使用start()方法產生多個進程,然後等待所有進程,直到完成並再次繼續處理。任何想法都會對我非常有用。謝謝。使用來自Java的進程生成器產生多個進程

回答

2

一般來說,開始將代表您致電Runtime.exec(...)

一旦運行(關閉它自己的小進程),您可以通過進程輸入和輸出流與它進行交互。

在我自己的工作中,我監視輸入和錯誤流。我通過爲每個流派生一個新線程並通過stream.read()方法監視通過放置的方法並查找-1的返回結果來確定流何時完成。

我使用第三個「監視器」線程,它用於提供「waitFor」功能並幫助清理流線程。

我會推薦至少讀取單獨線程中的輸入和錯誤流,因爲這樣可以監視進程而不會阻塞當前線程上下文。

如果您想等待過程退出,則應使用Process.waitFor()(該過程由ProcessBuilder.start()方法返回給您)。這將等待進程退出。此方法將返回該進程的退出代碼,可用於響應該進程可能想要告訴您的錯誤。

好了,總之......

ProcessBuilder pb = new ProcessBuilder(new String[] {cmd, parameter1, parameter2, ...}); 
Process process = pb.start(); 

InputStream is = process.getInputStream(); 
InputStream isErr process.getErrorStream(); 

// Spawn some threads to process the streams 

int exitValue = process.waitFor(); 

if (exitValue == 0) { 

    System.out.println("All is good with the world"); 

} else { 

    // Handle error  

} 
+0

謝謝你的幫助。現在我的問題是我有我打電話......問題是,這個shell腳本內的awk腳本當我調用shell腳本時,awk腳本沒有被執行。Wat可能是這個問題... – NandaKumar 2012-07-23 00:14:29