- java.lang.Object
-
- java.lang.ProcessBuilder
-
public final class ProcessBuilder extends Object
このクラスは、オペレーティング・システムのプロセスの作成に使用されます。各
ProcessBuilder
インスタンスは、プロセス属性のコレクションを管理します。start()
メソッドはそれらの属性を使って新しいProcess
インスタンスを作成します。 同じインスタンスからstart()
メソッドを繰返し呼び出して、同一の属性または関連する属性を持つ新規サブプロセスを作成できます。startPipeline
メソッドを呼び出して、各プロセスの出力を次のプロセスに直接送る新しいプロセスのパイプラインを作成することができます。 各プロセスにはそれぞれのProcessBuilderの属性があります。各プロセス・ビルダーは、次のプロセス属性を管理します。
- コマンド。呼び出される外部プログラム・ファイルと、その引数(存在する場合)を示す文字列のリストです。 どの文字列リストが有効なオペレーティング・システム・コマンドを表すかは、システムに応じて異なります。 たとえば、概念上の引数がリストの要素となるのが一般的ですが、プログラムがコマンド行文字列自体をトークン化することが要求されるオペレーティング・システムがあります。このようなシステムのJava実装では、正確に2つの要素を含むコマンドが必要になる場合があります。
- 環境。環境は変数から値へのシステム依存のマッピングです。 初期値は現在のプロセスの環境のコピーです(
System.getenv()
を参照)。 - 作業ディレクトリ。 デフォルト値は、現在のプロセスの現在の作業ディレクトリです。通常、このディレクトリはシステム・プロパティ
user.dir
で名前が付けられたディレクトリです。 - 標準入力の入力元。 デフォルトでは、サブプロセスはパイプから入力を読み取ります。 Javaコード内でこのパイプにアクセスするには、
Process.getOutputStream()
から返される出力ストリームを使用します。 ただし標準入力は、redirectInput
を使って別の入力元にリダイレクトできます。 この場合、Process.getOutputStream()
から次のようなヌル出力ストリームが返されます。 - 標準出力と標準エラーの出力先。 デフォルトでは、サブプロセスは標準出力と標準エラーをパイプに書き込みます。 Javaコードは、
Process.getOutputStream()
およびProcess.getErrorStream()
によって返される入力ストリームを介してこれらのパイプにアクセスできます。 ただし標準出力や標準エラーは、redirectOutput
やredirectError
を使って他の出力先にリダイレクトできます。 この場合、Process.getInputStream()
またはProcess.getErrorStream()
、あるいはその両方から、次のようなヌル入力ストリームが返されます。 - redirectErrorStreamプロパティ。 初期状態では、このプロパティは
false
です。つまり、サブプロセスの標準出力とエラー出力は、2つの独立したストリームに送信されます。これらの出力にはProcess.getInputStream()
メソッドとProcess.getErrorStream()
メソッドを使ってアクセスできます。値が
true
に設定された場合:- 標準エラーが標準出力にマージされ、両者が常に同じ出力先に送信される(この場合、エラー・メッセージと対応する出力との相関関係が把握しやすくなる)
- 標準エラーと標準出力の共通の出力先をリダイレクトするには、
redirectOutput
を使用する - サブプロセスの作成時に、
redirectError
メソッドで設定されたリダイレクトは無視される Process.getErrorStream()
から返されるストリームは常にヌル入力ストリームとなる
プロセス・ビルダーの属性を変更すると、属性を変更したオブジェクトの
start()
メソッドでそれ以降起動されるプロセスに影響がありますが、それ以前に起動されたプロセスやJavaプロセス自体には影響ありません。ほとんどのエラー・チェックは
start()
メソッドで実行されます。start()
が失敗するように、オブジェクトの状態を変更できます。 たとえば、コマンド属性を空のリストに設定すると、start()
が呼び出されない限り、例外はスローされません。このクラスは同期化されません。 複数のスレッドが
ProcessBuilder
インスタンスに並行してアクセスし、少なくとも1つのスレッドが構造的に1つの属性を変更した場合、変更された属性は外部で同期化されなければいけません。デフォルトの作業ディレクトリと環境を使用する新しいプロセスを起動するのは、次に示すように容易です。
Process p = new ProcessBuilder("myCommand", "myArg").start();
変更された作業ディレクトリと環境を使ってプロセスを起動し、標準出力と標準エラーがログ・ファイルに追加されるようにリダイレクトする例を、次に示します。
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;
環境変数の明示的セットを持つプロセスを起動するには、まず
Map.clear()
を呼び出してから、環境変数を追加します。ほかで指定がない場合、
null
引数をコンストラクタまたはこのクラスのメソッドへ渡すと、NullPointerException
がスローされます。- 導入されたバージョン:
- 1.5
-
-
ネストされたクラスのサマリー
ネストされたクラス 修飾子と型 クラス 説明 static class
ProcessBuilder.Redirect
サブプロセスの入力元またはサブプロセスの出力先を表します。
-
コンストラクタのサマリー
コンストラクタ コンストラクタ 説明 ProcessBuilder(String... command)
指定されたオペレーティング・システム・プログラムと引数を持つプロセス・ビルダーを構築します。ProcessBuilder(List<String> command)
指定されたオペレーティング・システム・プログラムと引数を持つプロセス・ビルダーを構築します。
-
メソッドのサマリー
修飾子と型 メソッド 説明 List<String>
command()
プロセス・ビルダーのオペレーティング・システム・プログラムと引数を返します。ProcessBuilder
command(String... command)
このプロセス・ビルダーのオペレーティング・システム・プログラムと引数を設定します。ProcessBuilder
command(List<String> command)
このプロセス・ビルダーのオペレーティング・システム・プログラムと引数を設定します。File
directory()
このプロセス・ビルダーの作業ディレクトリを返します。ProcessBuilder
directory(File directory)
このプロセス・ビルダーの作業ディレクトリを設定します。Map<String,String>
environment()
このプロセス・ビルダーの環境の文字列マップのビューを返します。ProcessBuilder
inheritIO()
サブプロセスの標準入出力の入力元と出力先を、現在のJavaプロセスと同じものに設定します。ProcessBuilder.Redirect
redirectError()
このプロセス・ビルダーの標準エラー出力先を返します。ProcessBuilder
redirectError(File file)
このプロセス・ビルダーの標準エラー出力先をファイルに設定します。ProcessBuilder
redirectError(ProcessBuilder.Redirect destination)
このプロセス・ビルダーの標準エラー出力先を設定します。boolean
redirectErrorStream()
このプロセス・ビルダーが標準エラーと標準出力をマージするかどうかを判定します。ProcessBuilder
redirectErrorStream(boolean redirectErrorStream)
このプロセス・ビルダーのredirectErrorStream
プロパティを設定します。ProcessBuilder.Redirect
redirectInput()
このプロセス・ビルダーの標準入力元を返します。ProcessBuilder
redirectInput(File file)
このプロセス・ビルダーの標準入力元をファイルに設定します。ProcessBuilder
redirectInput(ProcessBuilder.Redirect source)
このプロセス・ビルダーの標準入力元を設定します。ProcessBuilder.Redirect
redirectOutput()
このプロセス・ビルダーの標準出力先を返します。ProcessBuilder
redirectOutput(File file)
このプロセス・ビルダーの標準出力先をファイルに設定します。ProcessBuilder
redirectOutput(ProcessBuilder.Redirect destination)
このプロセス・ビルダーの標準出力先を設定します。Process
start()
このプロセス・ビルダーの属性を使って新規プロセスを起動します。static List<Process>
startPipeline(List<ProcessBuilder> builders)
各ProcessBuilderのプロセスを開始し、標準出力ストリームと標準入力ストリームによってリンクされたプロセスのパイプラインを作成します。
-
-
-
コンストラクタの詳細
-
ProcessBuilder
public ProcessBuilder(List<String> command)
指定されたオペレーティング・システム・プログラムと引数を持つプロセス・ビルダーを構築します。 このコンストラクタは、command
リストのコピーを作成しません。 以降のリストの更新は、プロセス・ビルダーの状態に反映されます。command
が有効なオペレーティング・システム・コマンドに対応するかどうかはチェックされません。- パラメータ:
command
- プログラムとプログラムの引数を含むリスト
-
ProcessBuilder
public ProcessBuilder(String... command)
指定されたオペレーティング・システム・プログラムと引数を持つプロセス・ビルダーを構築します。 このコンストラクタは、command
配列と同じ文字列を含む文字列リストに、プロセス・ビルダーのコマンドを同じ順序で設定する簡易コンストラクタです。command
が有効なオペレーティング・システム・コマンドに対応するかどうかはチェックされません。- パラメータ:
command
- プログラムとプログラムの引数を含む文字列配列
-
-
メソッドの詳細
-
command
public ProcessBuilder command(List<String> command)
このプロセス・ビルダーのオペレーティング・システム・プログラムと引数を設定します。 このメソッドは、command
リストのコピーを作成しません。 以降のリストの更新は、プロセス・ビルダーの状態に反映されます。command
が有効なオペレーティング・システム・コマンドに対応するかどうかはチェックされません。- パラメータ:
command
- プログラムとプログラムの引数を含むリスト- 戻り値:
- このプロセス・ビルダー
-
command
public ProcessBuilder command(String... command)
このプロセス・ビルダーのオペレーティング・システム・プログラムと引数を設定します。 このコンストラクタは、command
配列と同じ文字列を含む文字列リストにコマンドを同じ順序で設定する簡易メソッドです。command
が有効なオペレーティング・システム・コマンドに対応するかどうかはチェックされません。- パラメータ:
command
- プログラムとプログラムの引数を含む文字列配列- 戻り値:
- このプロセス・ビルダー
-
command
public List<String> command()
プロセス・ビルダーのオペレーティング・システム・プログラムと引数を返します。 返されたリストはコピーではありません。 以降のリストの更新は、プロセス・ビルダーの状態に反映されます。- 戻り値:
- このプロセス・ビルダーのプログラムとプログラムの引数
-
environment
public Map<String,String> environment()
このプロセス・ビルダーの環境の文字列マップのビューを返します。 プロセス・ビルダーが作成されるたびに、環境は現在のプロセス環境のコピーに初期化されます(System.getenv()
を参照)。 これ以降、このオブジェクトのstart()
メソッドで起動されたサブプロセスは、このマップを環境として使用します。返されたオブジェクトは、通常の
Map
操作を使って変更できます。 これらの変更は、start()
メソッドを使って起動されたサブプロセスで可視になります。 2つのProcessBuilder
インスタンスは常に独立したプロセス環境を持っています。このため、返されたマップへの変更が、他のProcessBuilder
インスタンスや、System.getenv
から返される値に反映されることはありません。システムが環境変数をサポートしていない場合は、空のマップが返されます。
返されたマップは、nullのキーや値を許容しません。 nullのキーや値を挿入したり、これらがあるか照会すると、
NullPointerException
がスローされます。String
以外の型のキーや値が存在するかどうかのクエリーを試みると、ClassCastException
がスローされます。返されたマップの動作はシステムに依存します。 環境変数の変更を許可しないシステムがあれば、特定の変数名や値が禁止されるシステムもあります。 この理由から、オペレーティング・システムで変更が許可されていない場合にマップを変更しようとすると、
UnsupportedOperationException
やIllegalArgumentException
で失敗する可能性があります。環境変数名と環境変数の値の外部形式はシステムに依存するので、環境変数名と環境変数の値とJavaのUnicode文字列との間に1対1のマッピング関係がない可能性があります。 その場合でも、Javaコードで変更されていない環境変数が、サブプロセスでも変更されていないネイティブな表現を持つようにマップは実装されます。
返されたマップとそのコレクション・ビューは、
Object.equals(java.lang.Object)
メソッドとObject.hashCode()
メソッドの汎用規約に従わない可能性があります。返されたマップは、一般にすべてのプラットフォームで大文字と小文字を区別します。
セキュリティ・マネージャが存在する場合は、その
checkPermission
メソッドがRuntimePermission
("getenv.*")
アクセス権で呼び出されます。 これにより、SecurityException
がスローされる可能性があります。Javaサブプロセスに情報を渡す場合、一般的に環境変数よりもシステム・プロパティが推奨されます。
- 戻り値:
- このプロセス・ビルダーの環境
- 例外:
SecurityException
- セキュリティ・マネージャが存在し、そのcheckPermission
メソッドがプロセス環境へのアクセスを許可しない場合- 関連項目:
Runtime.exec(String[],String[],java.io.File)
,System.getenv()
-
directory
public File directory()
このプロセス・ビルダーの作業ディレクトリを返します。 このオブジェクトのstart()
メソッドでそれ以降起動されたサブプロセスは、このディレクトリを作業ディレクトリとして使用します。 戻り値は、null
の可能性があります。これは、現在のJavaプロセスの作業ディレクトリ(通常はuser.dir
システム・プロパティで指定されたディレクトリ)を子プロセスの作業ディレクトリとして使用することを意味します。- 戻り値:
- このプロセス・ビルダーの作業ディレクトリ
-
directory
public ProcessBuilder directory(File directory)
このプロセス・ビルダーの作業ディレクトリを設定します。 このオブジェクトのstart()
メソッドでそれ以降起動されたサブプロセスは、このディレクトリを作業ディレクトリとして使用します。 引数は、null
の可能性があります。これは、現在のJavaプロセスの作業ディレクトリ(通常はuser.dir
システム・プロパティで指定されたディレクトリ)を子プロセスの作業ディレクトリとして使用することを意味します。- パラメータ:
directory
- 新規作業ディレクトリ- 戻り値:
- このプロセス・ビルダー
-
redirectInput
public ProcessBuilder redirectInput(ProcessBuilder.Redirect source)
このプロセス・ビルダーの標準入力元を設定します。 これ以降、このオブジェクトのstart()
メソッドで起動されたサブプロセスは、標準入力をこの入力元から取得します。sourceが
Redirect.PIPE
(初期値)の場合、Process.getOutputStream()
から返される出力ストリームを使ってサブプロセスの標準入力への書込みを行えます。 sourceをその他の値に設定した場合、Process.getOutputStream()
からヌル出力ストリームが返されます。- パラメータ:
source
- 新しい標準入力元- 戻り値:
- このプロセス・ビルダー
- 例外:
IllegalArgumentException
- リダイレクトがデータの有効な出力先に対応していない場合、つまりその型がWRITE
またはAPPEND
の場合- 導入されたバージョン:
- 1.7
-
redirectOutput
public ProcessBuilder redirectOutput(ProcessBuilder.Redirect destination)
このプロセス・ビルダーの標準出力先を設定します。 これ以降、このオブジェクトのstart()
メソッドで起動されたサブプロセスは、標準出力をこの出力先に送信します。destinationが
Redirect.PIPE
(初期値)の場合、Process.getInputStream()
から返される入力ストリームを使ってサブプロセスの標準出力の読取りを行えます。 destinationをその他の値に設定した場合、Process.getInputStream()
からヌル入力ストリームが返されます。- パラメータ:
destination
- 新しい標準出力先- 戻り値:
- このプロセス・ビルダー
- 例外:
IllegalArgumentException
- リダイレクトがデータの有効な出力先に対応していない場合、つまり次の型を持つ場合:READ
- 導入されたバージョン:
- 1.7
-
redirectError
public ProcessBuilder redirectError(ProcessBuilder.Redirect destination)
このプロセス・ビルダーの標準エラー出力先を設定します。 これ以降、このオブジェクトのstart()
メソッドで起動されたサブプロセスは、標準エラーをこの出力先に送信します。destinationが
Redirect.PIPE
(初期値)の場合、Process.getErrorStream()
から返される入力ストリームを使ってサブプロセスのエラー出力の読取りを行えます。 destinationをその他の値に設定した場合、Process.getErrorStream()
からヌル入力ストリームが返されます。redirectErrorStream
属性がtrue
に設定されていた場合、このメソッドで設定されたリダイレクトは何の効果も持ちません。- パラメータ:
destination
- 新しい標準エラー出力先- 戻り値:
- このプロセス・ビルダー
- 例外:
IllegalArgumentException
- リダイレクトがデータの有効な出力先に対応していない場合、つまり次の型を持つ場合:READ
- 導入されたバージョン:
- 1.7
-
redirectInput
public ProcessBuilder redirectInput(File file)
このプロセス・ビルダーの標準入力元をファイルに設定します。これは、簡易メソッドです。
redirectInput(file)
の形式で呼び出した場合、呼び出しredirectInput
(Redirect.from(file))
とまったく同じ動作になります。- パラメータ:
file
- 新しい標準入力元- 戻り値:
- このプロセス・ビルダー
- 導入されたバージョン:
- 1.7
-
redirectOutput
public ProcessBuilder redirectOutput(File file)
このプロセス・ビルダーの標準出力先をファイルに設定します。これは、簡易メソッドです。
redirectOutput(file)
の形式で呼び出した場合、呼び出しredirectOutput
(Redirect.to(file))
とまったく同じ動作になります。- パラメータ:
file
- 新しい標準出力先- 戻り値:
- このプロセス・ビルダー
- 導入されたバージョン:
- 1.7
-
redirectError
public ProcessBuilder redirectError(File file)
このプロセス・ビルダーの標準エラー出力先をファイルに設定します。これは、簡易メソッドです。
redirectError(file)
の形式で呼び出した場合、呼び出しredirectError
(Redirect.to(file))
とまったく同じ動作になります。- パラメータ:
file
- 新しい標準エラー出力先- 戻り値:
- このプロセス・ビルダー
- 導入されたバージョン:
- 1.7
-
redirectInput
public ProcessBuilder.Redirect redirectInput()
このプロセス・ビルダーの標準入力元を返します。 これ以降、このオブジェクトのstart()
メソッドで起動されたサブプロセスは、標準入力をこの入力元から取得します。 初期値はRedirect.PIPE
です。- 戻り値:
- このプロセス・ビルダーの標準入力元
- 導入されたバージョン:
- 1.7
-
redirectOutput
public ProcessBuilder.Redirect redirectOutput()
このプロセス・ビルダーの標準出力先を返します。 これ以降、このオブジェクトのstart()
メソッドで起動されたサブプロセスは、標準出力をこの出力先にリダイレクトします。 初期値はRedirect.PIPE
です。- 戻り値:
- このプロセス・ビルダーの標準出力先
- 導入されたバージョン:
- 1.7
-
redirectError
public ProcessBuilder.Redirect redirectError()
このプロセス・ビルダーの標準エラー出力先を返します。 これ以降、このオブジェクトのstart()
メソッドで起動されたサブプロセスは、標準エラーをこの出力先にリダイレクトします。 初期値はRedirect.PIPE
です。- 戻り値:
- このプロセス・ビルダーの標準エラー出力先
- 導入されたバージョン:
- 1.7
-
inheritIO
public ProcessBuilder inheritIO()
サブプロセスの標準入出力の入力元と出力先を、現在のJavaプロセスと同じものに設定します。これは、簡易メソッドです。 次の形式の呼出しは、
pb.inheritIO()
pb.redirectInput(Redirect.INHERIT) .redirectOutput(Redirect.INHERIT) .redirectError(Redirect.INHERIT)
system()
と同等のものになります。- 戻り値:
- このプロセス・ビルダー
- 導入されたバージョン:
- 1.7
-
redirectErrorStream
public boolean redirectErrorStream()
このプロセス・ビルダーが標準エラーと標準出力をマージするかどうかを判定します。このプロパティが
true
の場合、このオブジェクトのstart()
メソッドでそれ以降起動されたサブプロセスにより生成されるエラー出力は、標準出力とマージされます。これにより、Process.getInputStream()
メソッドを使って、エラー出力と標準出力の両方を読み取ることができます。 マージにより、エラー・メッセージと対応する出力との相関を示すのが容易になります。 初期値はfalse
です。- 戻り値:
- このプロセス・ビルダーの
redirectErrorStream
プロパティ
-
redirectErrorStream
public ProcessBuilder redirectErrorStream(boolean redirectErrorStream)
このプロセス・ビルダーのredirectErrorStream
プロパティを設定します。このプロパティが
true
の場合、このオブジェクトのstart()
メソッドでそれ以降起動されたサブプロセスにより生成されるエラー出力は、標準出力とマージされます。これにより、Process.getInputStream()
メソッドを使って、エラー出力と標準出力の両方を読み取ることができます。 マージにより、エラー・メッセージと対応する出力との相関を示すのが容易になります。 初期値はfalse
です。- パラメータ:
redirectErrorStream
- 新しいプロパティの値- 戻り値:
- このプロセス・ビルダー
-
start
public Process start() throws IOException
このプロセス・ビルダーの属性を使って新規プロセスを起動します。新しいプロセスは、
directory()
で与えられる作業ディレクトリ内で、environment()
で与えられるプロセス環境の下、command()
で与えられるコマンドと引数を呼び出します。このメソッドは、コマンドが有効なオペレーティング・システム・コマンドであることをチェックします。 どのコマンドが有効かはシステム依存ですが、コマンドは少なくともnull以外の文字列の空でないリストである必要があります。
一部のオペレーティング・システムでは、プロセスを起動するために最小限のシステム依存環境変数のセットが必要となる可能性があります。 このため、プロセス・ビルダーの
environment()
に含まれていない追加の環境変数設定をサブプロセスが継承する可能性があります。セキュリティ・マネージャが存在する場合はその
checkExec
メソッドが呼び出されますが、その際、このオブジェクトのcommand
配列の最初のコンポーネントが引数として指定されます。 これにより、SecurityException
がスローされる可能性があります。オペレーティング・システム・プロセスの起動はきわめてシステムに依存します。 発生する可能性がある不具合は次のとおりです。
- オペレーティング・システム・プログラム・ファイルが見つからなかった。
- プログラム・ファイルへのアクセス権が拒否された。
- 作業ディレクトリが存在しない。
- NULのように、コマンド引数に無効な文字があります。
以上のケースでは、例外がスローされます。 例外の正確な特性はシステムに依存しますが、これは常に
IOException
のサブクラスになります。オペレーティング・システムがプロセスの作成をサポートしていない場合は、
UnsupportedOperationException
がスローされます。このプロセス・ビルダーへの以降の変更は、返された
Process
に影響を及ぼしません。- 戻り値:
- サブプロセス管理用の新しい
Process
オブジェクト - 例外:
NullPointerException
- コマンド・リストの要素がnullの場合IndexOutOfBoundsException
- コマンドが空(サイズが0
)のリストの場合SecurityException
- セキュリティ・マネージャが存在していて、- その
checkExec
メソッドがサブプロセスの作成を許可しない場合、または - サブプロセスの標準入力がファイルからの読取りにリダイレクトされていて、セキュリティ・マネージャの
checkRead
メソッドがファイルからの読取りアクセスを拒否する場合、または - サブプロセスの標準出力または標準エラーがファイルにリダイレクトされていて、セキュリティ・マネージャの
checkWrite
メソッドがファイルへの書込みアクセスを拒否する場合
- その
UnsupportedOperationException
- オペレーティング・システムがプロセスの作成をサポートしていない場合。IOException
- 入出力エラーが発生した場合- 関連項目:
Runtime.exec(String[], String[], java.io.File)
-
startPipeline
public static List<Process> startPipeline(List<ProcessBuilder> builders) throws IOException
各ProcessBuilderのプロセスを開始し、標準出力ストリームと標準入力ストリームによってリンクされたプロセスのパイプラインを作成します。 各ProcessBuilderの属性は、各プロセスの開始時に標準出力が次のプロセスの標準入力に導かれることを除いて、それぞれのプロセスを開始するために使用されます。 最初のプロセスの標準入力と最後のプロセスの標準出力のリダイレクトは、それぞれのProcessBuilderのリダイレクト設定を使用して初期化されます。 他のすべてのProcessBuilder
リダイレクトはRedirect.PIPE
でなければなりません。中間プロセス間のすべての入出力ストリームにはアクセスできません。 最初のプロセスを除くすべてのプロセスの
標準入力
は「null出力ストリーム」です。最後のプロセスを除くすべてのプロセスの標準出力
は「null入力ストリーム」です。各ProcessBuilderの
redirectErrorStream()
はそれぞれのプロセスに適用されます。true
に設定すると、エラー・ストリームは標準出力と同じストリームに書き込まれます。いずれかのプロセスの起動時に例外がスローされると、すべてのプロセスが強制的に破棄されます。
startPipeline
メソッドは、start()
メソッドと同じように各ProcessBuilderで同じチェックを実行します。 各新規プロセスは、それぞれのプロセス・ビルダーcommand()
によって指定されたコマンドと引数を、そのenvironment()
で指定されたプロセス環境を持つ、directory()
によって指定された作業ディレクトリに呼び出します。各プロセス・ビルダー・コマンドが、有効なオペレーティング・システム・コマンドとしてチェックされます。 どのコマンドが有効かはシステム依存ですが、コマンドは少なくともnull以外の文字列の空でないリストである必要があります。
一部のオペレーティング・システムでは、プロセスを起動するために最小限のシステム依存環境変数のセットが必要となる可能性があります。 このため、プロセス・ビルダーの
environment()
に含まれていない追加の環境変数設定をサブプロセスが継承する可能性があります。セキュリティ・マネージャが存在する場合、その
checkExec
メソッドが各プロセス・ビルダーのcommand
配列の最初のコンポーネントとしてコールされます。 これにより、SecurityException
がスローされる可能性があります。オペレーティング・システム・プロセスの起動はきわめてシステムに依存します。 発生する可能性がある不具合は次のとおりです。
- オペレーティング・システム・プログラム・ファイルが見つからなかった。
- プログラム・ファイルへのアクセス権が拒否された。
- 作業ディレクトリが存在しない。
- NULのように、コマンド引数に無効な文字があります。
以上のケースでは、例外がスローされます。 例外の正確な特性はシステムに依存しますが、これは常に
IOException
のサブクラスになります。オペレーティング・システムがプロセスの作成をサポートしていない場合は、
UnsupportedOperationException
がスローされます。指定されたビルダーのいずれかに対するその後の変更は、返された
Process
には影響しません。- APIの注:
- たとえば、Unix互換プラットフォーム上のファイル階層内のすべてのファイルのユニークなインポートを数えるには:
String directory = "/home/duke/src"; ProcessBuilder[] builders = { new ProcessBuilder("find", directory, "-type", "f"), new ProcessBuilder("xargs", "grep", "-h", "^import "), new ProcessBuilder("awk", "{print $2;}"), new ProcessBuilder("sort", "-u")}; List<Process> processes = ProcessBuilder.startPipeline( Arrays.asList(builders)); Process last = processes.get(processes.size()-1); try (InputStream is = last.getInputStream(); Reader isr = new InputStreamReader(is); BufferedReader r = new BufferedReader(isr)) { long count = r.lines().count(); }
- パラメータ:
builders
- ProcessBuildersのリスト- 戻り値:
- 対応するProcessBuilderから開始された
List<Process>
- 例外:
IllegalArgumentException
- 最初のビルダーの標準入力と最後のビルダーの標準出力を除くすべてのリダイレクトはProcessBuilder.Redirect.PIPE
ではありません。NullPointerException
- コマンド・リストの要素がnullの場合、またはProcessBuilderリストの要素がnullの場合、またはビルダー引数がnullの場合IndexOutOfBoundsException
- コマンドが空(サイズが0
)のリストの場合SecurityException
- セキュリティ・マネージャが存在していて、- その
checkExec
メソッドがサブプロセスの作成を許可しない場合、または - サブプロセスの標準入力がファイルからの読取りにリダイレクトされていて、セキュリティ・マネージャの
checkRead
メソッドがファイルからの読取りアクセスを拒否する場合、または - サブプロセスの標準出力または標準エラーがファイルにリダイレクトされていて、セキュリティ・マネージャの
checkWrite
メソッドがファイルへの書込みアクセスを拒否する場合
- その
UnsupportedOperationException
- オペレーティング・システムがプロセスの作成をサポートしていない場合IOException
- 入出力エラーが発生した場合- 導入されたバージョン:
- 9
-
-