- 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 classProcessBuilder.Redirectサブプロセスの入力元またはサブプロセスの出力先を表します。
-
コンストラクタのサマリー
コンストラクタ コンストラクタ 説明 ProcessBuilder(String... command)指定されたオペレーティング・システム・プログラムと引数を持つプロセス・ビルダーを構築します。ProcessBuilder(List<String> command)指定されたオペレーティング・システム・プログラムと引数を持つプロセス・ビルダーを構築します。
-
メソッドのサマリー
すべてのメソッド 静的メソッド インスタンス・メソッド 具象メソッド 修飾子と型 メソッド 説明 List<String>command()プロセス・ビルダーのオペレーティング・システム・プログラムと引数を返します。ProcessBuildercommand(String... command)このプロセス・ビルダーのオペレーティング・システム・プログラムと引数を設定します。ProcessBuildercommand(List<String> command)このプロセス・ビルダーのオペレーティング・システム・プログラムと引数を設定します。Filedirectory()このプロセス・ビルダーの作業ディレクトリを返します。ProcessBuilderdirectory(File directory)このプロセス・ビルダーの作業ディレクトリを設定します。Map<String,String>environment()このプロセス・ビルダーの環境の文字列マップのビューを返します。ProcessBuilderinheritIO()サブプロセスの標準入出力の入力元と出力先を、現在のJavaプロセスと同じものに設定します。ProcessBuilder.RedirectredirectError()このプロセス・ビルダーの標準エラー出力先を返します。ProcessBuilderredirectError(File file)このプロセス・ビルダーの標準エラー出力先をファイルに設定します。ProcessBuilderredirectError(ProcessBuilder.Redirect destination)このプロセス・ビルダーの標準エラー出力先を設定します。booleanredirectErrorStream()このプロセス・ビルダーが標準エラーと標準出力をマージするかどうかを判定します。ProcessBuilderredirectErrorStream(boolean redirectErrorStream)このプロセス・ビルダーのredirectErrorStreamプロパティを設定します。ProcessBuilder.RedirectredirectInput()このプロセス・ビルダーの標準入力元を返します。ProcessBuilderredirectInput(File file)このプロセス・ビルダーの標準入力元をファイルに設定します。ProcessBuilderredirectInput(ProcessBuilder.Redirect source)このプロセス・ビルダーの標準入力元を設定します。ProcessBuilder.RedirectredirectOutput()このプロセス・ビルダーの標準出力先を返します。ProcessBuilderredirectOutput(File file)このプロセス・ビルダーの標準出力先をファイルに設定します。ProcessBuilderredirectOutput(ProcessBuilder.Redirect destination)このプロセス・ビルダーの標準出力先を設定します。Processstart()このプロセス・ビルダーの属性を使って新規プロセスを起動します。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()
この動作は、ほとんどのオペレーティング・システム・コマンド・インタプリタや標準Cライブラリ関数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で同じチェックを実行します。 新しいプロセスは、directory()で与えられる作業ディレクトリ内で、environment()で与えられるプロセス環境の下、command()で与えられるコマンドと引数を呼び出します。このメソッドは、コマンドが有効なオペレーティング・システム・コマンドであることをチェックします。 どのコマンドが有効かはシステム依存ですが、コマンドは少なくとも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
-
-