我正在開發一個Web應用程序,其中我使用Java作爲我的前端,並將shell用作我的後端。我在shell中處理很多文件..例如,如果我必須處理100個文件。我計劃從Java應用程序產生4個子進程。我讀了關於process Builder的內容。但是我沒有清楚地知道如何使用start()方法產生多個進程,然後等待所有進程,直到完成並再次繼續處理。任何想法都會對我非常有用。謝謝。使用來自Java的進程生成器產生多個進程
1
A
回答
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
}
相關問題
- 1. Java進程生成器生成命令
- 2. 使用Python產生多個進程
- 3. Pydev中的Django產生多個進程?
- 4. 如何銷燬從java中的進程生成器生成的進程
- 5. Upstart產生多個uWSGI Emperor進程
- 6. 生成許多進程erlang
- 7. 殺死產生進程的進程
- 8. Java簡單進程生成器問題
- 9. 用PHP產生多個進程來處理數據。
- 10. 暫停由java產生的子進程
- 11. 使用進程生成器重定向進程輸出
- 12. 產生多個進程來編寫不同的文件Python
- 13. Java重生進程
- 14. 多處理不會產生新進程
- 15. C#Excel COM Interop:產生太多進程
- 16. Java進程對其他窗口進程產生優先
- 17. 不能產生子進程
- 18. 從父進程派生/產生許多node.js進程的最高性能方式
- 19. 的java管/進程生成不CMD.EXE
- 20. Visual Studio:產生進程時自動附加到進程
- 21. Linux進程產生/創建觸發器
- 22. 使用進程生成器從java中運行cmd命令
- 23. 使用java進程生成器播放wav文件
- 24. 使用進程生成器在Internet Explorer中打開文件Java
- 25. 關於一個進程和產生它的進程(win32/C)
- 26. 如何防止從產卵子進程產生的進程?
- 27. Fortran中的生成進程
- 28. Java進程生成器在成功啓動外部進程後返回null
- 29. 在完成之前停止使用pool.apply_async()產生的進程
- 30. start-stop-daemon產生2個進程
謝謝你的幫助。現在我的問題是我有我打電話......問題是,這個shell腳本內的awk腳本當我調用shell腳本時,awk腳本沒有被執行。Wat可能是這個問題... – NandaKumar 2012-07-23 00:14:29