2012-10-08 20 views
3

良好合作,爲的ProcessBuilder它指出什麼不會的ProcessBuilder和後臺進程

創造過程可能不適合某些本地 平臺特殊工藝,如本地窗口工作流程以及方法的JavaDoc,守護進程,Win16/DOS進程
Microsoft Windows或shell腳本。

我的主要問題是什麼ProcessBuilder不能很好地與守護進程工作? ProcessBuilder不適合作爲啓動這些類型應用程序的可接受方式嗎?

謝謝!

+0

在JavaDoc中它說明了什麼?我找不到它。 –

+0

http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html 它在Process上說的就是當你想執行它時從ProcessBuilder返回的東西。 – mrkaiser

回答

1

我的猜測(根據我在code grep中發現的意見)是問題在於您必須處理流程的流程,並且此處理可能是一個問題。

創造了某些本地平臺,特別 過程,如本地窗口 進程,守護進程,Win16的/ DOS在Microsoft Windows, 或shell腳本進程可能無法正常工作的方法。創建的子流程沒有自己的 終端或控制檯。它的所有標準I/O(即stdin,stdout,stderr) 操作將通過三個流(getOutputStream(),getInputStream(),getErrorStream())重定向到父進程。父進程使用這些流向 提供輸入並從子進程獲取輸出。由於某些本地平臺僅爲標準輸入和輸出流提供有限的 緩衝區大小,因此無法及時寫入輸入流或讀取子流程的輸出流可能導致子流程阻塞甚至死鎖。

它也可能與這樣的事實,Process是一個抽象類,每一個JRE/JDK附帶着它自己的平臺依賴的過程實現(如UNIXProcessWindowsProcess等),有些操作系統可能只是有相關的限制打開Java在其文檔中無法覆蓋的進程。

再次 - 這只是一個猜測,代碼不會透露太多。根據我的經驗(在* nix系統和windows上) - 您的代碼大部分時間都需要在平臺上意識到如何構建命令行,如何提供參數(在arguments參數中或在命令中線)以及如何構建衍生過程的環境(繼承過程的值或自行創建)。無論如何,這更多是一場試錯的遊戲。

相關問題