モジュール java.base
パッケージ java.lang

クラスProcessBuilder

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()から次のようなヌル出力ストリームが返されます。
    • writeメソッドは常にIOExceptionをスローする
    • closeメソッドは何も行わない
  • 標準出力標準エラーの出力先 デフォルトでは、サブプロセスは標準出力と標準エラーをパイプに書き込みます。 Javaコード内でこれらのパイプにアクセスするには、Process.getInputStream()およびProcess.getErrorStream()から返される入力ストリームを使用します。 ただし標準出力や標準エラーは、redirectOutputredirectErrorを使って他の出力先にリダイレクトできます。 この場合、Process.getInputStream()またはProcess.getErrorStream()、あるいはその両方から、次のようなヌル入力ストリームが返されます。
    • readメソッドは常に-1を返す
    • availableメソッドは常に0を返す
    • closeメソッドは何も行わない
  • 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
  • コンストラクタの詳細

    • 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がスローされます。

      返されたマップの動作はシステムに依存します。 環境変数の変更を許可しないシステムがあれば、特定の変数名や値が禁止されるシステムもあります。 この理由から、オペレーティング・システムで変更が許可されていない場合にマップを変更しようとすると、UnsupportedOperationExceptionIllegalArgumentExceptionで失敗する可能性があります。

      環境変数名と環境変数の値の外部形式はシステムに依存するので、環境変数名と環境変数の値とJavaのUnicode文字列との間に1対1のマッピング関係がない可能性があります。 その場合でも、Javaコードで変更されていない環境変数が、サブプロセスでも変更されていないネイティブな表現を持つようにマップは実装されます。

      返されたマップとそのコレクション・ビューは、Object.equals(java.lang.Object)メソッドとObject.hashCode()メソッドの汎用規約に従わない可能性があります。

      返されたマップは、一般にすべてのプラットフォームで大文字と小文字を区別します。

      セキュリティ・マネージャが存在する場合は、そのcheckPermissionメソッドがRuntimePermission("getenv.*")アクセス権で呼び出されます。 これにより、SecurityExceptionがスローされる可能性があります。

      Javaサブプロセスに情報を渡す場合、一般的に環境変数よりもシステム・プロパティが推奨されます。

      戻り値:
      このプロセス・ビルダーの環境
      例外:
      SecurityException - セキュリティ・マネージャが存在し、そのcheckPermissionメソッドがプロセス環境へのアクセスを許可しない場合
      関連項目:
    • 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)
       
      この動作は、ほとんどのオペレーティング・システム・コマンド・インタプリタや標準Cライブラリ関数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 - 入出力エラーが発生した場合
      関連項目:
    • 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