ProcessBuilder 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
這個類別是用來建立作業系統進程。
[Android.Runtime.Register("java/lang/ProcessBuilder", DoNotGenerateAcw=true)]
public sealed class ProcessBuilder : Java.Lang.Object
[<Android.Runtime.Register("java/lang/ProcessBuilder", DoNotGenerateAcw=true)>]
type ProcessBuilder = class
inherit Object
- 繼承
- 屬性
備註
這個類別是用來建立作業系統進程。
每個 ProcessBuilder
實例都會管理進程屬性的集合。 方法 #start()
會使用這些屬性建立新的 Process
實例。 #start()
您可以從相同的實例重複叫用 方法,以建立具有相同或相關屬性的新子進程。
每個進程產生器都會管理這些進程屬性:
<ul>
<li >命令,這是表示要叫用的外部程式檔及其引數的字串清單,如果有的話。 哪些字串清單代表有效的作業系統命令是系統相依的。 例如,每個概念引數通常都是此清單中的元素,但有一些作業系統預期會將命令列字串本身標記化-在這類系統上,JAVA 實作可能需要命令只包含兩個元素。
<li >環境,這是從 變數 到 值的系統相依對應。 初始值是目前進程環境的複本, (請參閱 System#getenv()
) 。
<li > 工作 目錄。 預設值是目前進程的目前工作目錄,通常是系統屬性 user.dir
所命名的目錄。
<li > 「redirect-input」 > a source of < i > standard input < /i > . 根據預設,子進程會從管道讀取輸入。 JAVA 程式碼可以透過 所 Process#getOutputStream()
傳回的輸出資料流程來存取此管道。 不過,標準輸入可能會使用 #redirectInput(Redirect) redirectInput
重新導向至另一個來源。 在此情況下, Process#getOutputStream()
會傳回 Null 輸出資料流程,其中:
<ul >< li > 方法 OutputStream#write(int) write
一律擲回 IOException
< li > 方法 OutputStream#close() close
不會 < 執行任何 /ul>
<li > 「redirect-output」 > a destination for < i > standard output < /i > and < i > standard error < /i > . 根據預設,子進程會將標準輸出和標準錯誤寫入管道。 JAVA 程式碼可以透過 和 Process#getErrorStream()
傳 Process#getInputStream()
回的輸入資料流程來存取這些管道。 不過,您可以使用 和 #redirectError(Redirect) redirectError
,將標準輸出和標準錯誤重新導向至其他目的地 #redirectOutput(Redirect) redirectOutput
。 在此情況下, Process#getInputStream()
和/或 Process#getErrorStream()
會傳回 Null 輸入資料流程,其中:
<ul >< li > 方法 InputStream#read() read
一律會傳回 <-1
li 方法 InputStream#available() available
一律會 0
< 傳回 li >> 方法 InputStream#close() close
,方法不會 < 執行任何動作 /ul>
<li > a redirectErrorStream property. 一開始,這個屬性是 false
,這表示子進程的標準輸出和錯誤輸出會傳送至兩個不同的資料流程,您可以使用 和 Process#getErrorStream()
方法來存取 Process#getInputStream()
。
如果值設定為 true
,則:
<ul >< li > 標準錯誤會與標準輸出合併,且一律傳送至相同的目的地 (這可讓您更輕鬆地將錯誤訊息與對應的輸出相互關聯) < li > 標準錯誤的常見目的地,而且 #redirectOutput(Redirect) redirectOutput
< 使用 方法 > 所設定 #redirectError(Redirect) redirectError
的任何重新導向,在建立 <> 從 傳回 Process#getErrorStream()
的資料流程時,會忽略 方法所設定的任何重新導向,一律會是 null 輸入資料流程 < /ul>
</ul>
修改進程產生器的屬性會影響該物件 #start()
方法後續啟動的進程,但永遠不會影響先前啟動的進程或 JAVA 進程本身。
大部分的錯誤檢查都是由 #start()
方法執行。 修改物件的 #start()
狀態可能會失敗。 例如,除非 #start()
叫用 ,否則將命令屬性設定為空清單將不會擲回例外狀況。
<strong > 請注意,此類別不會同步處理。 </strong > 如果多個執行緒同時存取 ProcessBuilder
實例,而且至少有一個執行緒以結構化方式修改其中一個屬性, 則必須 在外部同步處理。
啟動使用預設工作目錄和環境的新程式很簡單:
{@code
Process p = new ProcessBuilder("myCommand", "myArg").start();
}
以下是使用修改的工作目錄和環境啟動程式的範例,並將標準輸出和錯誤重新導向至記錄檔:
{@code
ProcessBuilder pb =
new ProcessBuilder("myCommand", "myArg1", "myArg2");
Map<String, String> env = pb.environment();
env.put("VAR1", "myValue");
env.remove("OTHERVAR");
env.put("VAR2", env.get("VAR1") + "suffix");
pb.directory(new File("myDir"));
File log = new File("log");
pb.redirectErrorStream(true);
pb.redirectOutput(Redirect.appendTo(log));
Process p = pb.start();
assert pb.redirectInput() == Redirect.PIPE;
assert pb.redirectOutput().file() == log;
assert p.getInputStream().read() == -1;
}
若要使用一組明確的環境變數啟動進程,請先呼叫 java.util.Map#clear() Map.clear()
再新增環境變數。
在 1.5 中新增。
的 java.lang.ProcessBuilder
JAVA 檔。
此頁面的部分是根據所建立和共用的工作進行修改,並根據 2.5 屬性授權中所述的詞彙來使用。
建構函式
ProcessBuilder(IList<String>) |
使用指定的作業系統程式和引數建構進程產生器。 |
ProcessBuilder(String[]) |
使用指定的作業系統程式和引數建構進程產生器。 |
屬性
Class |
傳回這個 |
Handle |
基礎 Android 實例的控制碼。 (繼承來源 Object) |
JniIdentityHashCode |
這個類別是用來建立作業系統進程。 (繼承來源 Object) |
JniPeerMembers |
這個類別是用來建立作業系統進程。 |
PeerReference |
這個類別是用來建立作業系統進程。 (繼承來源 Object) |
ThresholdClass |
此 API 支援適用于 Android 的 Mono 基礎結構,並不適合直接從您的程式碼使用。 (繼承來源 Object) |
ThresholdType |
此 API 支援適用于 Android 的 Mono 基礎結構,並不適合直接從您的程式碼使用。 (繼承來源 Object) |
方法
Clone() |
建立並傳回這個 物件的複本。 (繼承來源 Object) |
Command() |
傳回這個進程產生器的作業系統程式和引數。 |
Command(IList<String>) |
設定這個進程產生器的作業系統程式和引數。 |
Command(String[]) |
傳回這個進程產生器的作業系統程式和引數。 |
Directory() |
傳回這個進程產生器的工作目錄。 |
Directory(File) |
設定此進程產生器的工作目錄。 |
Dispose() |
這個類別是用來建立作業系統進程。 (繼承來源 Object) |
Dispose(Boolean) |
這個類別是用來建立作業系統進程。 (繼承來源 Object) |
Environment() |
傳回這個進程產生器環境的字串對應檢視。 |
Equals(Object) |
指出其他物件是否「等於」這個物件。 (繼承來源 Object) |
GetHashCode() |
傳回此物件的雜湊碼值。 (繼承來源 Object) |
InheritIO() |
將子進程標準 I/O 的來源和目的地設定為與目前 JAVA 進程相同的來源和目的地。 |
JavaFinalize() |
當垃圾收集判斷物件不再參考物件時,垃圾收集行程會在物件上呼叫。 (繼承來源 Object) |
Notify() |
喚醒正在等候此物件監視器的單一線程。 (繼承來源 Object) |
NotifyAll() |
喚醒正在等候此物件監視器的所有線程。 (繼承來源 Object) |
RedirectError() |
傳回這個進程產生器的標準錯誤目的地。 |
RedirectError(File) |
將此進程產生器的標準錯誤目的地設定為檔案。 |
RedirectError(ProcessBuilder+Redirect) |
傳回這個進程產生器的標準錯誤目的地。 |
RedirectErrorStream() |
告知此進程產生器是否合併標準錯誤和標準輸出。 |
RedirectErrorStream(Boolean) |
設定這個進程產生器的 |
RedirectInput() |
傳回這個進程產生器的標準輸入來源。 |
RedirectInput(File) |
將此進程產生器的標準輸入來源設定為檔案。 |
RedirectInput(ProcessBuilder+Redirect) |
傳回這個進程產生器的標準輸入來源。 |
RedirectOutput() |
傳回這個進程產生器的標準輸出目的地。 |
RedirectOutput(File) |
將此進程產生器的標準輸出目的地設定為檔案。 |
RedirectOutput(ProcessBuilder+Redirect) |
傳回這個進程產生器的標準輸出目的地。 |
SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
Start() |
使用這個進程產生器的屬性啟動新的進程。 |
ToArray<T>() |
這個類別是用來建立作業系統進程。 (繼承來源 Object) |
ToString() |
傳回物件的字串表示。 (繼承來源 Object) |
UnregisterFromRuntime() |
這個類別是用來建立作業系統進程。 (繼承來源 Object) |
Wait() |
讓目前的執行緒等到喚醒為止,通常是 em < notified/em > 或 < em > interrupted < /em > 。 >< (繼承來源 Object) |
Wait(Int64) |
讓目前的執行緒等到喚醒為止,通常是 em < notified/em > 或 < em > interrupted < /em > ,或直到經過一定數量的即時為止。 <> (繼承來源 Object) |
Wait(Int64, Int32) |
讓目前的執行緒等到喚醒為止,通常是 em < notified/em > 或 < em > interrupted < /em > ,或直到經過一定數量的即時為止。 <> (繼承來源 Object) |
明確介面實作
IJavaPeerable.Disposed() |
這個類別是用來建立作業系統進程。 (繼承來源 Object) |
IJavaPeerable.DisposeUnlessReferenced() |
這個類別是用來建立作業系統進程。 (繼承來源 Object) |
IJavaPeerable.Finalized() |
這個類別是用來建立作業系統進程。 (繼承來源 Object) |
IJavaPeerable.JniManagedPeerState |
這個類別是用來建立作業系統進程。 (繼承來源 Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
這個類別是用來建立作業系統進程。 (繼承來源 Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
這個類別是用來建立作業系統進程。 (繼承來源 Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
這個類別是用來建立作業系統進程。 (繼承來源 Object) |
擴充方法
JavaCast<TResult>(IJavaObject) |
執行 Android 執行時間檢查的類型轉換。 |
JavaCast<TResult>(IJavaObject) |
這個類別是用來建立作業系統進程。 |
GetJniTypeName(IJavaPeerable) |
這個類別是用來建立作業系統進程。 |