|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.lang.ProcessBuilder
public final class ProcessBuilder
このクラスは、オペレーティングシステムのプロセスの作成に使用されます。
各 ProcessBuilder
インスタンスは、プロセス属性のコレクションを管理します。start()
メソッドは、これらの属性を持つ新規 Process
インスタンスを作成します。同じインスタンスから start()
メソッドを繰り返し呼び出して、同一の属性または関連する属性を持つ新規サブプロセスを作成できます。
各プロセスビルダーは、次のプロセス属性を管理します。
System.getenv()
を参照)。
user.dir
で名前が付けられたディレクトリです。
false
です。 つまり、サブプロセスの標準出力とエラー出力は、2 つの独立したストリームに送信されます。 これらの出力には Process.getInputStream()
メソッドと Process.getErrorStream()
メソッドを使ってアクセスできます。この値を true
に設定すると、標準エラーは標準出力にマージされます。マージにより、エラーメッセージと対応する出力との相関を示すのが容易になります。この場合、マージされたデータは、Process.getInputStream()
が返すストリームから読み取ることができますが、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")); Process p = pb.start();
環境変数の明示的セットを持つプロセスを起動するには、まず Map.clear()
を呼び出してから、環境変数を追加します。
コンストラクタの概要 | |
---|---|
ProcessBuilder(List<String> command)
指定されたオペレーティングシステムプログラムと引数を持つプロセスビルダーを構築します。 |
|
ProcessBuilder(String... command)
指定されたオペレーティングシステムプログラムと引数を持つプロセスビルダーを構築します。 |
メソッドの概要 | |
---|---|
List<String> |
command()
プロセスビルダーのオペレーティングシステムプログラムと引数を返します。 |
ProcessBuilder |
command(List<String> command)
このプロセスビルダーのオペレーティングシステムプログラムと引数を設定します。 |
ProcessBuilder |
command(String... command)
このプロセスビルダーのオペレーティングシステムプログラムと引数を設定します。 |
File |
directory()
このプロセスビルダーの作業ディレクトリを返します。 |
ProcessBuilder |
directory(File directory)
このプロセスビルダーの作業ディレクトリを設定します。 |
Map<String,String> |
environment()
このプロセスビルダーの環境の文字列マップのビューを返します。 |
boolean |
redirectErrorStream()
このプロセスビルダーが標準エラーと標準出力をマージするかどうかを判定します。 |
ProcessBuilder |
redirectErrorStream(boolean redirectErrorStream)
このプロセスビルダーの redirectErrorStream プロパティーを設定します。 |
Process |
start()
このプロセスビルダーの属性を使って新規プロセスを起動します。 |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
コンストラクタの詳細 |
---|
public ProcessBuilder(List<String> command)
command
リストのコピーを作成しません。以降のリストの更新は、プロセスビルダーの状態に反映されます。command
が有効なオペレーティングシステムコマンドに対応するかどうかはチェックされません。
command
- プログラムとプログラムの引数を含むリスト
NullPointerException
- 引数が null
の場合public ProcessBuilder(String... command)
command
配列と同じ文字列を含む文字列リストに、プロセスビルダーのコマンドを同じ順序で設定する簡易コンストラクタです。command
が有効なオペレーティングシステムコマンドに対応するかどうかはチェックされません。
command
- プログラムとプログラムの引数を含む文字列配列メソッドの詳細 |
---|
public ProcessBuilder command(List<String> command)
command
リストのコピーを作成しません。以降のリストの更新は、プロセスビルダーの状態に反映されます。command
が有効なオペレーティングシステムコマンドに対応するかどうかはチェックされません。
command
- プログラムとプログラムの引数を含むリスト
NullPointerException
- 引数が null
の場合public ProcessBuilder command(String... command)
command
配列と同じ文字列を含む文字列リストにコマンドを同じ順序で設定する簡易メソッドです。command
が有効なオペレーティングシステムコマンドに対応するかどうかはチェックされません。
command
- プログラムとプログラムの引数を含む文字列配列
public List<String> command()
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()
メソッドの汎用規約に従わない可能性があります。
返されたマップは、一般にすべてのプラットフォームで大文字と小文字を区別します。
セキュリティーマネージャーが存在する場合は、
アクセス権を使って RuntimePermission
("getenv.*")checkPermission
メソッドが呼び出されます。この結果、SecurityException
がスローされることがあります。
Java サブプロセスに情報を渡す場合、一般的に環境変数よりもシステムプロパティーが推奨されます。
SecurityException
- セキュリティーマネージャーが存在し、checkPermission
メソッドがプロセス環境へのアクセスを許可しないときRuntime.exec(String[],String[],java.io.File)
,
System.getenv()
public File directory()
start()
メソッドで起動されたサブプロセスは、このディレクトリを作業ディレクトリとして使用します。戻り値は、null
の可能性があります。 これは、現在の Java プロセスの作業ディレクトリ (通常は user.dir
システムプロパティーで指定されたディレクトリ) を子プロセスの作業ディレクトリとして使用することを意味します。
public ProcessBuilder directory(File directory)
start()
メソッドで起動されたサブプロセスは、このディレクトリを作業ディレクトリとして使用します。引数は、null
の可能性があります。 これは、現在の Java プロセスの作業ディレクトリ (通常は user.dir
システムプロパティーで指定されたディレクトリ) を子プロセスの作業ディレクトリとして使用することを意味します。
directory
- 新規作業ディレクトリ
public boolean redirectErrorStream()
このプロパティーが true
の場合、このオブジェクトの start()
メソッドでそれ以降起動されたサブプロセスにより生成されるエラー出力は、標準出力とマージされます。 これにより、Process.getInputStream()
メソッドを使って、エラー出力と標準出力の両方を読み取ることができます。マージにより、エラーメッセージと対応する出力との相関を示すのが容易になります。初期値は false
です。
redirectErrorStream
プロパティーpublic ProcessBuilder redirectErrorStream(boolean redirectErrorStream)
redirectErrorStream
プロパティーを設定します。
このプロパティーが true
の場合、このオブジェクトの start()
メソッドでそれ以降起動されたサブプロセスにより生成されるエラー出力は、標準出力とマージされます。 これにより、Process.getInputStream()
メソッドを使って、エラー出力と標準出力の両方を読み取ることができます。マージにより、エラーメッセージと対応する出力との相関を示すのが容易になります。初期値は false
です。
redirectErrorStream
- 新しいプロパティーの値
public Process start() throws IOException
この新規プロセスは、directory()
で指定された作業ディレクトリの、environment()
で指定されたプロセス環境を持つ、command()
で指定されたコマンドと引数を呼び出します。
このメソッドは、コマンドが有効な オペレーティングシステムコマンドであることをチェックします。どのコマンドが有効かはシステム依存ですが、コマンドは少なくとも null 以外の文字列の空でないリストである必要があります。
セキュリティーマネージャーが存在する場合は、command
配列の最初のコンポーネントを引数として使って checkExec
メソッドが呼び出されます。この結果、SecurityException
がスローされることがあります。
オペレーティングシステムプロセスの起動はきわめてシステムに依存します。発生する可能性がある不具合は次のとおりです。
以上のケースでは、例外がスローされます。例外の正確な特性はシステムに依存しますが、これは常に IOException
のサブクラスになります。
このプロセスビルダーへの以降の変更は、返された Process
に影響を及ぼしません。
Process
オブジェクト
NullPointerException
- コマンドリストの要素が null の場合
IndexOutOfBoundsException
- コマンドが空 (サイズが 0
) のリストの場合
SecurityException
- セキュリティーマネージャーが存在し、checkExec
メソッドがサブプロセスの作成を許可しない場合
IOException
- 入出力エラーが発生した場合Runtime.exec(String[], String[], java.io.File)
,
SecurityManager.checkExec(String)
|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。