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())。
<李>工作目錄。 預設值為目前程序的工作目錄,通常是由系統屬性 user.dir命名的目錄。
<Li>“Redirect-Input”>,一個 I<標準>輸入</i> 的來源。 預設情況下,子程序會讀取從管線讀取輸入。 Java 程式碼可透過 返回的輸出串流Process#getOutputStream()存取此管線。 然而,標準輸入可透過 #redirectInput(Redirect) redirectInput重新導向至其他來源。 此時, Process#getOutputStream() 會回傳 一個空輸出串流,對於:
<UL><LI >OutputStream#write(int) write方法總是丟IOException< Li>OutputStream#close() close 方法 什麼都沒<做 /ul>
<Li>「Redirect-output」>是 I<標準輸出>/I< 和 >I<標準錯誤>/i< 的目的地>。 預設情況下,子程序會將標準輸出和標準誤寫入管線。 Java 程式碼可透過 與 Process#getInputStream()返回Process#getErrorStream()的輸入串流存取這些管線。 然而,標準輸出與標準誤可透過 #redirectOutput(Redirect) redirectOutput#redirectError(Redirect) redirectError和 重新導向至其他目的地。 在這種情況下, Process#getInputStream() 和/或 Process#getErrorStream() 會回傳 一個空輸入串流,對於以下情況:
<ul><li>InputStream#read() read 方法總是回傳-1< Li>方法InputStream#available() available總是回傳0< Li>方法什麼InputStream#close() close都不<做 /ul>
<li>a redirectErrorStream 屬性。 最初,此性質為 false,意即子程序的標準輸出與錯誤輸出會被傳送到兩個獨立的串流,這些串流可透過 Process#getInputStream() and Process#getErrorStream() 方法存取。
若 值設為 true,則:
<UL>LI 標準誤會與標準輸出合併,且總是送往相同的目的地(這使錯誤訊息與對應的輸出更容易關聯)。<LI>標準誤差與標準輸出的共同目的地可以用 LI<重新導向>#redirectOutput(Redirect) redirectOutput。方法設定<的任何重定向在建立子程序>時都會被忽略,LI#redirectError(Redirect) redirectError回傳<的串流永遠是空輸入串流>/UL。Process#getErrorStream()<>
</ul>
修改程序建構者的屬性會影響該物件#start()方法後續啟動的程序,但不會影響先前啟動的程序或 Java 程序本身。
大多數錯誤檢查都是透過該 #start() 方法執行的。 可以修改物件的狀態,使此方法 #start() 失敗。 例如,將命令屬性設為空清單,除非 #start() 被呼叫,否則不會拋出例外。
<強:>請注意,這個類別並非同步的。</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.ProcessBuilderJava 檔。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
建構函式
| 名稱 | Description |
|---|---|
| ProcessBuilder(IList<String>) |
用指定的作業系統程式和參數建構程序建構器。 |
| ProcessBuilder(String[]) |
用指定的作業系統程式和參數建構程序建構器。 |
屬性
| 名稱 | Description |
|---|---|
| Class |
回傳此 |
| Handle |
底層 Android 實例的帳號。 (繼承來源 Object) |
| JniIdentityHashCode |
取得由互通執行時指派給此 Java 對等端的身份雜湊碼。 (繼承來源 Object) |
| JniManagedPeerState |
此類別用於建立作業系統程序。 (繼承來源 JavaObject) |
| JniPeerMembers |
取得用於調用此 Java 節點成員的 JNI 元資料。 |
| PeerReference |
取得這個 Java 節點的 JNI 物件參考。 (繼承來源 Object) |
| ThresholdClass |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 (繼承來源 Object) |
| ThresholdType |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 (繼承來源 Object) |
方法
| 名稱 | Description |
|---|---|
| Clone() |
建立並回傳此物件的副本。 (繼承來源 Object) |
| Command() |
回傳此程序建構者的作業系統程式與參數。 |
| Command(IList<String>) |
設定此程序建構者的作業系統程式與參數。 |
| Command(String[]) |
回傳此程序建構者的作業系統程式與參數。 |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
此類別用於建立作業系統程序。 (繼承來源 JavaObject) |
| Directory() |
回傳此程序建構者的工作目錄。 |
| Directory(File) |
設定此程序為建構者的工作目錄。 |
| Dispose() |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| Dispose(Boolean) |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| DisposeUnlessReferenced() |
此類別用於建立作業系統程序。 (繼承來源 JavaObject) |
| Environment() |
回傳此製程建構者環境的字串地圖視圖。 |
| Equals(Object) |
此類別用於建立作業系統程序。 (繼承來源 JavaObject) |
| 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) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
此類別用於建立作業系統程序。 (繼承來源 JavaObject) |
| Start() |
利用此程序建構器的屬性啟動一個新程序。 |
| ToArray<T>() |
從這個 Java 陣列包裝器建立一個受管理陣列。 (繼承來源 Object) |
| ToString() |
回傳物件的字串表示。 (繼承來源 Object) |
| UnregisterFromRuntime() |
將此 Java 節點從互通執行時中取消註冊。 (繼承來源 Object) |
| Wait() |
導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。 (繼承來源 Object) |
| Wait(Int64, Int32) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
| Wait(Int64) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
明確介面實作
| 名稱 | Description |
|---|---|
| IJavaPeerable.Disposed() |
此類別用於建立作業系統程序。 (繼承來源 JavaObject) |
| IJavaPeerable.Finalized() |
此類別用於建立作業系統程序。 (繼承來源 JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
此類別用於建立作業系統程序。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
此類別用於建立作業系統程序。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
此類別用於建立作業系統程序。 (繼承來源 JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
此類別用於建立作業系統程序。 (繼承來源 JavaObject) |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
此類別用於建立作業系統程序。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |