鴻蒙OS ProcessBuilder

2022-05-18 16:53 更新

ProcessBuilder

java.lang.Object

|---java.lang.ProcessBuilder

public final class ProcessBuilder
extends Object

此類用于創(chuàng)建操作系統(tǒng)進(jìn)程。

每個(gè) ProcessBuilder 實(shí)例管理一個(gè)流程屬性的集合。 start() 方法使用這些屬性創(chuàng)建一個(gè)新的 Process 實(shí)例。 可以從同一個(gè)實(shí)例重復(fù)調(diào)用 start() 方法來創(chuàng)建具有相同或相關(guān)屬性的新子流程。

每個(gè)流程構(gòu)建器都管理這些流程屬性:

  • 一個(gè)命令,一個(gè)字符串列表,表示要調(diào)用的外部程序文件及其參數(shù)(如果有)。 哪些字符串列表代表有效的操作系統(tǒng)命令取決于系統(tǒng)。 例如,每個(gè)概念參數(shù)通常是該列表中的一個(gè)元素,但在某些操作系統(tǒng)中,程序需要自己標(biāo)記命令行字符串——在這樣的系統(tǒng)上,Java 實(shí)現(xiàn)可能需要命令恰好包含兩個(gè)元素。

  • 環(huán)境,它是從變量到值的系統(tǒng)相關(guān)映射。 初始值是當(dāng)前進(jìn)程環(huán)境的副本。

  • 一個(gè)工作目錄。 默認(rèn)值為當(dāng)前進(jìn)程的當(dāng)前工作目錄,通常是系統(tǒng)屬性u(píng)ser.dir命名的目錄。

  • 標(biāo)準(zhǔn)輸入源 默認(rèn)情況下,子進(jìn)程從管道讀取輸入。 Java 代碼可以通過 Process#getOutputStream() 返回的輸出流訪問此管道。 但是,標(biāo)準(zhǔn)輸入可以使用redirectInput 重定向到另一個(gè)源。 在這種情況下,Process#getOutputStream() 將返回一個(gè)空輸出流,其中:

  • OutputStream#write(int) 方法總是拋出 IOException
  • OutputStream#close() 方法什么也不做

  • 標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤的目的地。 默認(rèn)情況下,子進(jìn)程將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤寫入管道。 Java 代碼可以通過 Process#getInputStream() 和 Process#getErrorStream() 返回的輸入流訪問這些管道。 但是,標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤可以使用redirectOutput 和redirectError 重定向到其他目的地。 在這種情況下, Process#getInputStream() 和/或 Process#getErrorStream() 將返回一個(gè)空輸入流,其中:

  • InputStream#read() 方法總是返回 -1
  • InputStream#available() 方法總是返回 0
  • InputStream#close() 方法什么也不做

  • 一個(gè) redirectErrorStream 屬性。 最初,此屬性為 false,這意味著子進(jìn)程的標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出被發(fā)送到兩個(gè)單獨(dú)的流,可以使用 Process#getInputStream() 和 Process#getErrorStream() 方法訪問它們。

如果該值設(shè)置為 true,則:

  • 標(biāo)準(zhǔn)錯(cuò)誤與標(biāo)準(zhǔn)輸出合并并始終發(fā)送到相同的目的地(這使得將錯(cuò)誤消息與相應(yīng)的輸出關(guān)聯(lián)起來更容易)
  • 標(biāo)準(zhǔn)錯(cuò)誤和標(biāo)準(zhǔn)輸出的共同目的地可以使用redirectOutput重定向
  • 在創(chuàng)建子進(jìn)程時(shí),任何由 redirectError 方法設(shè)置的重定向都會(huì)被忽略
  • 從 Process#getErrorStream() 返回的流將始終為空輸入流

修改進(jìn)程構(gòu)建器的屬性將影響隨后由該對(duì)象的 start() 方法啟動(dòng)的進(jìn)程,但不會(huì)影響先前啟動(dòng)的進(jìn)程或 Java 進(jìn)程本身。

大多數(shù)錯(cuò)誤檢查由 start() 方法執(zhí)行。 可以修改對(duì)象的狀態(tài)以使 start() 失敗。 例如,將 command 屬性設(shè)置為空列表不會(huì)引發(fā)異常,除非調(diào)用 start()。

請(qǐng)注意,此類不同步。 如果多個(gè)線程同時(shí)訪問一個(gè) ProcessBuilder 實(shí)例,并且至少有一個(gè)線程在結(jié)構(gòu)上修改了其中一個(gè)屬性,則必須在外部進(jìn)行同步。

啟動(dòng)一個(gè)使用默認(rèn)工作目錄和環(huán)境的新進(jìn)程很容易:

  Process p = new ProcessBuilder("myCommand", "myArg").start(); 

下面是一個(gè)示例,它使用修改后的工作目錄和環(huán)境啟動(dòng)進(jìn)程,并將標(biāo)準(zhǔn)輸出和錯(cuò)誤重定向到附加到日志文件中:

 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;

要使用一組顯式環(huán)境變量啟動(dòng)進(jìn)程,請(qǐng)?jiān)谔砑迎h(huán)境變量之前首先調(diào)用 Map.clear()。

嵌套類摘要

修飾符和類型 描述
static class ProcessBuilder.Redirect 表示子流程輸入的來源或子流程輸出的目的地。

構(gòu)造函數(shù)摘要

構(gòu)造函數(shù) 描述
ProcessBuilder(String... command) 使用指定的操作系統(tǒng)程序和參數(shù)構(gòu)造一個(gè)進(jìn)程構(gòu)建器。
ProcessBuilder(ListString command) 使用指定的操作系統(tǒng)程序和參數(shù)構(gòu)造一個(gè)進(jìn)程構(gòu)建器。

方法總結(jié)

修飾符和類型 方法 描述
ListString command() 返回此進(jìn)程構(gòu)建器的操作系統(tǒng)程序和參數(shù)。
ProcessBuilder command(String... command) 設(shè)置此進(jìn)程構(gòu)建器的操作系統(tǒng)程序和參數(shù)。
ProcessBuilder command(ListString command) 設(shè)置此進(jìn)程構(gòu)建器的操作系統(tǒng)程序和參數(shù)。
File directory() 返回此流程構(gòu)建器的工作目錄。
ProcessBuilder directory(File directory) 設(shè)置此流程構(gòu)建器的工作目錄。
MapString,String environment() 返回此流程構(gòu)建器環(huán)境的字符串映射視圖。
ProcessBuilder inheritIO() 將子進(jìn)程標(biāo)準(zhǔn) I/O 的源和目標(biāo)設(shè)置為與當(dāng)前 Java 進(jìn)程的相同。
ProcessBuilder.Redirect redirectError() 返回此流程構(gòu)建器的標(biāo)準(zhǔn)錯(cuò)誤目標(biāo)。
ProcessBuilder redirectError(File file) 將此流程構(gòu)建器的標(biāo)準(zhǔn)錯(cuò)誤目標(biāo)設(shè)置為文件。
ProcessBuilder redirectError(ProcessBuilder.Redirect destination) 設(shè)置此流程構(gòu)建器的標(biāo)準(zhǔn)錯(cuò)誤目標(biāo)。
boolean redirectErrorStream() 告知此流程構(gòu)建器是否合并標(biāo)準(zhǔn)錯(cuò)誤和標(biāo)準(zhǔn)輸出。
ProcessBuilder redirectErrorStream(boolean redirectErrorStream) 設(shè)置此流程構(gòu)建器的 redirectErrorStream 屬性。
ProcessBuilder.Redirect redirectInput() 返回此流程構(gòu)建器的標(biāo)準(zhǔn)輸入源。
ProcessBuilder redirectInput(File file) 將此流程構(gòu)建器的標(biāo)準(zhǔn)輸入源設(shè)置為文件。
ProcessBuilder redirectInput(ProcessBuilder.Redirect source) 設(shè)置此流程構(gòu)建器的標(biāo)準(zhǔn)輸入源。
ProcessBuilder.Redirect redirectOutput() 返回此流程構(gòu)建器的標(biāo)準(zhǔn)輸出目標(biāo)。
ProcessBuilder redirectOutput(File file) 將此流程構(gòu)建器的標(biāo)準(zhǔn)輸出目標(biāo)設(shè)置為文件。
ProcessBuilder redirectOutput(ProcessBuilder.Redirect destination) 設(shè)置此流程構(gòu)建器的標(biāo)準(zhǔn)輸出目標(biāo)。
Process start() 使用此流程構(gòu)建器的屬性啟動(dòng)一個(gè)新流程。
從類 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

構(gòu)造函數(shù)詳細(xì)信息

ProcessBuilder

public ProcessBuilder(ListString command)

使用指定的操作系統(tǒng)程序和參數(shù)構(gòu)造一個(gè)進(jìn)程構(gòu)建器。 此構(gòu)造函數(shù)不會(huì)復(fù)制命令列表。 列表的后續(xù)更新將反映在流程構(gòu)建器的狀態(tài)中。 不檢查命令是否對(duì)應(yīng)于有效的操作系統(tǒng)命令。

參數(shù):

參數(shù)名稱 參數(shù)描述
command 包含程序及其參數(shù)的列表

Throws:

Throw名稱 Throw描述
NullPointerException 如果參數(shù)為空

ProcessBuilder

public ProcessBuilder(String... command)

使用指定的操作系統(tǒng)程序和參數(shù)構(gòu)造一個(gè)進(jìn)程構(gòu)建器。 這是一個(gè)方便的構(gòu)造函數(shù),它將進(jìn)程構(gòu)建器的命令設(shè)置為一個(gè)字符串列表,其中包含與命令數(shù)組相同的字符串,順序相同。 不檢查命令是否對(duì)應(yīng)于有效的操作系統(tǒng)命令。

參數(shù):

參數(shù)名稱 參數(shù)描述
command 包含程序及其參數(shù)的字符串?dāng)?shù)組

方法詳情

command

public ProcessBuilder command(ListString command)

設(shè)置此進(jìn)程構(gòu)建器的操作系統(tǒng)程序和參數(shù)。 此方法不會(huì)復(fù)制命令列表。 列表的后續(xù)更新將反映在流程構(gòu)建器的狀態(tài)中。 不檢查命令是否對(duì)應(yīng)于有效的操作系統(tǒng)命令。

參數(shù):

參數(shù)名稱 參數(shù)描述
command 包含程序及其參數(shù)的列表

返回:

此流程構(gòu)建器

Throws:

Throw名稱 Throw描述
NullPointerException 如果參數(shù)為空

command

public ProcessBuilder command(String... command)

設(shè)置此進(jìn)程構(gòu)建器的操作系統(tǒng)程序和參數(shù)。 這是一種方便的方法,它將命令設(shè)置為一個(gè)字符串列表,其中包含與命令數(shù)組相同的字符串,順序相同。 不檢查命令是否對(duì)應(yīng)于有效的操作系統(tǒng)命令。

參數(shù):

參數(shù)名稱 參數(shù)描述
command 包含程序及其參數(shù)的字符串?dāng)?shù)組

返回:

此流程構(gòu)建器

command

public ListString command()

返回此進(jìn)程構(gòu)建器的操作系統(tǒng)程序和參數(shù)。 返回的列表不是副本。 列表的后續(xù)更新將反映在此流程構(gòu)建器的狀態(tài)中。

返回:

此流程構(gòu)建器的程序及其參數(shù)

environment

public MapString,String environment()

返回此流程構(gòu)建器環(huán)境的字符串映射視圖。每當(dāng)創(chuàng)建流程構(gòu)建器時(shí),都會(huì)將環(huán)境初始化為當(dāng)前流程環(huán)境的副本(請(qǐng)參閱 System#getenv())。隨后由該對(duì)象的 start() 方法啟動(dòng)的子進(jìn)程將使用該映射作為它們的環(huán)境。

返回的對(duì)象可以使用普通的 Map 操作進(jìn)行修改。這些修改將對(duì)通過 start() 方法啟動(dòng)的子進(jìn)程可見。兩個(gè) ProcessBuilder 實(shí)例始終包含獨(dú)立的流程環(huán)境,因此對(duì)返回映射的更改將永遠(yuǎn)不會(huì)反映在任何其他 ProcessBuilder 實(shí)例或 System#getenv 返回的值中。

如果系統(tǒng)不支持環(huán)境變量,則返回一個(gè)空映射。

返回的映射不允許空鍵或值。嘗試插入或查詢是否存在空鍵或值將引發(fā) NullPointerException。嘗試查詢是否存在非 String 類型的鍵或值將引發(fā) ClassCastException。

返回地圖的行為取決于系統(tǒng)。系統(tǒng)可能不允許修改環(huán)境變量或可能禁止某些變量名稱或值。因此,如果操作系統(tǒng)不允許修改,嘗試修改映射可能會(huì)失敗并出現(xiàn) UnsupportedOperationException 或 IllegalArgumentException。

由于環(huán)境變量名稱和值的外部格式取決于系統(tǒng),因此它們與 Java 的 Unicode 字符串之間可能沒有一對(duì)一的映射。盡管如此,映射的實(shí)現(xiàn)方式是,未由 Java 代碼修改的環(huán)境變量將在子進(jìn)程中具有未修改的本機(jī)表示。

返回的地圖及其集合視圖可能不遵守 Object#equals 和 Object#hashCode 方法的一般約定。

返回的地圖通常在所有平臺(tái)上都區(qū)分大小寫。

如果存在安全管理器,則使用 RuntimePermission("getenv.*") 權(quán)限調(diào)用其 SecurityManager#checkPermission 方法。這可能會(huì)導(dǎo)致拋出 SecurityException。

將信息傳遞給 Java 子進(jìn)程時(shí),系統(tǒng)屬性通常優(yōu)于環(huán)境變量。

返回:

此流程構(gòu)建器的環(huán)境

Throws:

Throw名稱 Throw描述
SecurityException 如果存在安全管理器并且其 SecurityManager#checkPermission 方法不允許訪問進(jìn)程環(huán)境

directory

public File directory()

返回此流程構(gòu)建器的工作目錄。 隨后由該對(duì)象的 start() 方法啟動(dòng)的子進(jìn)程將使用它作為其工作目錄。 返回值可能為null——表示使用當(dāng)前Java進(jìn)程的工作目錄,通常是系統(tǒng)屬性u(píng)ser.dir命名的目錄,作為子進(jìn)程的工作目錄。

返回:

此流程構(gòu)建器的工作目錄

directory

public ProcessBuilder directory(File directory)

設(shè)置此流程構(gòu)建器的工作目錄。 隨后由該對(duì)象的 start() 方法啟動(dòng)的子進(jìn)程將使用它作為其工作目錄。 參數(shù)可以為null——表示使用當(dāng)前Java進(jìn)程的工作目錄,通常是系統(tǒng)屬性u(píng)ser.dir命名的目錄,作為子進(jìn)程的工作目錄。

參數(shù):

參數(shù)名稱 參數(shù)描述
directory 新的工作目錄

返回:

此流程構(gòu)建器

redirectInput

public ProcessBuilder redirectInput(ProcessBuilder.Redirect source)

設(shè)置此流程構(gòu)建器的標(biāo)準(zhǔn)輸入源。 隨后由該對(duì)象的 start() 方法啟動(dòng)的子進(jìn)程從此源獲取其標(biāo)準(zhǔn)輸入。

如果源是 Redirect#PIPE(初始值),則可以使用 Process#getOutputStream() 返回的輸出流寫入子進(jìn)程的標(biāo)準(zhǔn)輸入。 如果源設(shè)置為任何其他值,則 Process#getOutputStream() 將返回一個(gè)空輸出流。

參數(shù):

參數(shù)名稱 參數(shù)描述
source 新的標(biāo)準(zhǔn)輸入源

返回:

此流程構(gòu)建器

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果重定向不對(duì)應(yīng)于有效的數(shù)據(jù)源,即類型為 WRITE 或 APPEND

redirectOutput

public ProcessBuilder redirectOutput(ProcessBuilder.Redirect destination)

設(shè)置此流程構(gòu)建器的標(biāo)準(zhǔn)輸出目標(biāo)。 隨后由該對(duì)象的 start() 方法啟動(dòng)的子進(jìn)程將其標(biāo)準(zhǔn)輸出發(fā)送到該目的地。

如果目標(biāo)是 Redirect#PIPE(初始值),則可以使用 Process#getInputStream() 返回的輸入流讀取子進(jìn)程的標(biāo)準(zhǔn)輸出。 如果目標(biāo)設(shè)置為任何其他值,則 Process#getInputStream() 將返回一個(gè)空輸入流。

參數(shù):

參數(shù)名稱 參數(shù)描述
destination 新的標(biāo)準(zhǔn)輸出目的地

返回:

此流程構(gòu)建器

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果重定向不對(duì)應(yīng)于數(shù)據(jù)的有效目的地,即類型為 READ

redirectError

public ProcessBuilder redirectError(ProcessBuilder.Redirect destination)

設(shè)置此流程構(gòu)建器的標(biāo)準(zhǔn)錯(cuò)誤目標(biāo)。 隨后由該對(duì)象的 start() 方法啟動(dòng)的子進(jìn)程將其標(biāo)準(zhǔn)錯(cuò)誤發(fā)送到該目的地。

如果目標(biāo)是 Redirect#PIPE(初始值),則可以使用 Process#getErrorStream() 返回的輸入流讀取子進(jìn)程的錯(cuò)誤輸出。 如果目標(biāo)設(shè)置為任何其他值,則 Process#getErrorStream() 將返回空輸入流。

如果redirectErrorStream 屬性已設(shè)置為true,則此方法設(shè)置的重定向無效。

參數(shù):

參數(shù)名稱 參數(shù)描述
destination 新的標(biāo)準(zhǔn)錯(cuò)誤目的地

返回:

此流程構(gòu)建器

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果重定向不對(duì)應(yīng)于數(shù)據(jù)的有效目的地,即類型為 READ

redirectInput

public ProcessBuilder redirectInput(File file)

將此流程構(gòu)建器的標(biāo)準(zhǔn)輸入源設(shè)置為文件。

這是一種方便的方法。 形式redirectInput(file) 的調(diào)用與調(diào)用redirectInput (Redirect.from(file)) 的行為方式完全相同。

參數(shù):

參數(shù)名稱 參數(shù)描述
file 新的標(biāo)準(zhǔn)輸入源

返回:

此流程構(gòu)建器

redirectOutput

public ProcessBuilder redirectOutput(File file)

將此流程構(gòu)建器的標(biāo)準(zhǔn)輸出目標(biāo)設(shè)置為文件。

這是一種方便的方法。 形式redirectOutput(file) 的調(diào)用與調(diào)用redirectOutput (Redirect.to(file)) 的行為方式完全相同。

參數(shù):

參數(shù)名稱 參數(shù)描述
file 新的標(biāo)準(zhǔn)輸出目的地

返回:

此流程構(gòu)建器

redirectError

public ProcessBuilder redirectError(File file)

將此流程構(gòu)建器的標(biāo)準(zhǔn)錯(cuò)誤目標(biāo)設(shè)置為文件。

這是一種方便的方法。 調(diào)用redirectError(file) 形式的行為與調(diào)用redirectError (Redirect.to(file)) 完全相同。

參數(shù):

參數(shù)名稱 參數(shù)描述
file 新的標(biāo)準(zhǔn)錯(cuò)誤目的地

返回:

此流程構(gòu)建器

redirectInput

public ProcessBuilder.Redirect redirectInput()

返回此流程構(gòu)建器的標(biāo)準(zhǔn)輸入源。 隨后由該對(duì)象的 start() 方法啟動(dòng)的子進(jìn)程從此源獲取其標(biāo)準(zhǔn)輸入。 初始值為重定向#PIPE。

返回:

此流程構(gòu)建器的標(biāo)準(zhǔn)輸入源

redirectOutput

public ProcessBuilder.Redirect redirectOutput()

返回此流程構(gòu)建器的標(biāo)準(zhǔn)輸出目標(biāo)。 隨后由該對(duì)象的 start() 方法啟動(dòng)的子進(jìn)程將其標(biāo)準(zhǔn)輸出重定向到該目的地。 初始值為重定向#PIPE。

返回:

此流程構(gòu)建器的標(biāo)準(zhǔn)輸出目的地

redirectError

public ProcessBuilder.Redirect redirectError()

返回此流程構(gòu)建器的標(biāo)準(zhǔn)錯(cuò)誤目標(biāo)。 隨后由該對(duì)象的 start() 方法啟動(dòng)的子進(jìn)程將其標(biāo)準(zhǔn)錯(cuò)誤重定向到該目的地。 初始值為重定向#PIPE。

返回:

此流程構(gòu)建器的標(biāo)準(zhǔn)錯(cuò)誤目的地

inheritIO

public ProcessBuilder inheritIO()

將子進(jìn)程標(biāo)準(zhǔn) I/O 的源和目標(biāo)設(shè)置為與當(dāng)前 Java 進(jìn)程的相同。

這是一種方便的方法。 表單的調(diào)用

  pb.inheritIO() 

行為方式與調(diào)用完全相同

  pb.redirectInput(Redirect.INHERIT)   .redirectOutput(Redirect.INHERIT)   .redirectError(Redirect.INHERIT) 

這提供了相當(dāng)于大多數(shù)操作系統(tǒng)命令解釋器或標(biāo)準(zhǔn) C 庫函數(shù) system() 的行為。

返回:

此流程構(gòu)建器

redirectErrorStream

public boolean redirectErrorStream()

告知此流程構(gòu)建器是否合并標(biāo)準(zhǔn)錯(cuò)誤和標(biāo)準(zhǔn)輸出。

如果此屬性為true,則隨后由該對(duì)象的 start() 方法啟動(dòng)的子進(jìn)程生成的任何錯(cuò)誤輸出都將與標(biāo)準(zhǔn)輸出合并,以便可以使用 Process#getInputStream() 方法讀取兩者。 這使得更容易將錯(cuò)誤消息與相應(yīng)的輸出相關(guān)聯(lián)。 初始值為false。

返回:

此流程構(gòu)建器的 redirectErrorStream 屬性

redirectErrorStream

public ProcessBuilder redirectErrorStream(boolean redirectErrorStream)

設(shè)置此流程構(gòu)建器的 redirectErrorStream 屬性。

如果此屬性為true,則隨后由該對(duì)象的 start() 方法啟動(dòng)的子進(jìn)程生成的任何錯(cuò)誤輸出都將與標(biāo)準(zhǔn)輸出合并,以便可以使用 Process#getInputStream() 方法讀取兩者。 這使得更容易將錯(cuò)誤消息與相應(yīng)的輸出相關(guān)聯(lián)。 初始值為false。

參數(shù):

參數(shù)名稱 參數(shù)描述
redirectErrorStream 新的屬性值

返回:

此流程構(gòu)建器

start

public Process start() throws IOException

使用此流程構(gòu)建器的屬性啟動(dòng)一個(gè)新流程。

新進(jìn)程將在由 directory() 給出的工作目錄中調(diào)用由 command() 給出的命令和參數(shù),以及由 environment() 給出的進(jìn)程環(huán)境。

此方法檢查該命令是否為有效的操作系統(tǒng)命令。哪些命令有效取決于系統(tǒng),但至少該命令必須是非空字符串的非空列表。

在某些操作系統(tǒng)上啟動(dòng)進(jìn)程可能需要一組最小的系統(tǒng)相關(guān)環(huán)境變量。因此,子流程可能會(huì)繼承流程構(gòu)建器的 environment() 之外的其他環(huán)境變量設(shè)置。

如果存在安全管理器,則調(diào)用其 SecurityManager#checkExec 方法,并使用此對(duì)象的命令數(shù)組的第一個(gè)組件作為其參數(shù)。這可能會(huì)導(dǎo)致拋出 SecurityException。

啟動(dòng)操作系統(tǒng)進(jìn)程高度依賴于系統(tǒng)。可能出錯(cuò)的許多事情包括:

  • 未找到操作系統(tǒng)程序文件。
  • 訪問程序文件被拒絕。
  • 工作目錄不存在。

在這種情況下會(huì)拋出異常。 異常的確切性質(zhì)取決于系統(tǒng),但它始終是 IOException 的子類。

對(duì)此流程構(gòu)建器的后續(xù)修改不會(huì)影響返回的流程。

返回:

用于管理子流程的新流程對(duì)象

Throws:

Throw名稱 Throw描述
NullPointerException 如果命令列表的元素為空
IndexOutOfBoundsException 如果命令是一個(gè)空列表(大小為 0)
SecurityException 如果存在安全管理器并且其 SecurityManager#checkExec 方法不允許創(chuàng)建子進(jìn)程,或者子進(jìn)程的標(biāo)準(zhǔn)輸入從文件重定向并且安全管理器的 SecurityManager#checkRead 方法拒絕讀取文件,或者標(biāo)準(zhǔn)輸出或標(biāo)準(zhǔn) 子進(jìn)程的錯(cuò)誤被重定向到文件并且安全管理器的 SecurityManager#checkWrite 方法拒絕對(duì)文件的寫訪問
IOException 如果發(fā)生 I/O 錯(cuò)誤
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)