public abstract class Process extends Object
ProcessBuilder.start()メソッドやRuntime.execメソッドはネイティブのプロセスを作成し、Processのサブクラスのインスタンスを返しますが、これを使えば、そのプロセスを制御したり情報を取得したりできます。Processクラスは、プロセスからの入力、プロセスへの出力、プロセス完了の待機、プロセス終了状態の確認、およびプロセスの破棄(終了)を実行するための各メソッドを提供します。
たとえば、ネイティブなウィンドウ処理プロセス、デーモン・プロセス、Microsoft Windows環境でのWin16/DOSプロセス、あるいはシェル・スクリプトといったプロセスです。
デフォルトでは、作成されたサブプロセスは、自身の端末またはコンソールを持ちません。その標準入出力(つまり標準入力、標準出力、標準エラー)の処理はすべて親プロセスにリダイレクトされますが、それらの情報にアクセスするには、メソッドgetOutputStream()、getInputStream()、およびgetErrorStream()を使って取得されるストリームを使用します。親プロセスはこれらのストリームを使って、サブプロセスに入力を送ったり、サブプロセスからの出力を取得したりします。ネイティブなプラットフォームには標準入出力ストリームに使うバッファのサイズが限られるものもあるので、サブプロセスの入力ストリームの書き込みあるいはストリーム出力の読込みが失敗した場合、サブプロセスはブロックされるか、デッドロック状態になる可能性があります。
必要に応じて、ProcessBuilderクラスのメソッドを使ってサブプロセスの入出力をリダイレクトすることもできます。
Processオブジェクトへの参照がなくなった場合でも、サブプロセスは終了されず、非同期的に実行を続けます。
Processオブジェクトが表すプロセスの実行については、Processオブジェクトを所有するJavaプロセスと非同期でなかったり、並行でなかったりしてもかまいません。
1.5以降でProcessを作成するための推奨の方法は、ProcessBuilder.start()です。
| コンストラクタと説明 |
|---|
Process() |
| 修飾子と型 | メソッドと説明 |
|---|---|
abstract void |
destroy()
サブプロセスを終了します。
|
Process |
destroyForcibly()
サブプロセスを終了します。
|
abstract int |
exitValue()
サブプロセスの終了コードを返します。
|
abstract InputStream |
getErrorStream()
サブプロセスのエラー出力に接続された入力ストリームを返します。
|
abstract InputStream |
getInputStream()
サブプロセスの通常の出力に接続された入力ストリームを返します。
|
abstract OutputStream |
getOutputStream()
サブプロセスの通常の入力に接続された出力ストリームを返します。
|
boolean |
isAlive()
この
Processが表すサブプロセスが生存しているかどうかを判定します。 |
abstract int |
waitFor()
必要な場合に、この
Processオブジェクトが表すプロセスが終了するまで現在のスレッドを待機させます。 |
boolean |
waitFor(long timeout, TimeUnit unit)
必要に応じて、この
Processオブジェクトが表すサブプロセスが終了するか、指定された待機時間が経過するまで現在のスレッドを待機させます。 |
public abstract OutputStream getOutputStream()
Processオブジェクトが表すプロセスの標準入力に渡されます。
ProcessBuilder.redirectInputを使ってサブプロセスの標準入力をリダイレクトした場合、このメソッドからはnull出力ストリームが返されます。
実装にあたっての注意: 返される出力ストリームのバッファ処理をお薦めします。
public abstract InputStream getInputStream()
Processオブジェクトが表すプロセスの標準出力から渡されたデータを取得します。
ProcessBuilder.redirectOutputを使ってサブプロセスの標準出力をリダイレクトした場合、このメソッドからはnull入力ストリームが返されます。
それ以外の場合、ProcessBuilder.redirectErrorStreamを使ってサブプロセスの標準エラーをリダイレクトした場合、このメソッドから返される入力ストリームは、サブプロセスの標準出力と標準エラーがマージされたものを受け取ります。
実装にあたっての注意: 返される入力ストリームのバッファ処理をお薦めします。
public abstract InputStream getErrorStream()
Processオブジェクトが表すプロセスのエラー出力から渡されたデータを取得します。
ProcessBuilder.redirectErrorまたはProcessBuilder.redirectErrorStreamを使ってサブプロセスの標準エラーをリダイレクトした場合、このメソッドからはnull入力ストリームが返されます。
実装にあたっての注意: 返される入力ストリームのバッファ処理をお薦めします。
public abstract int waitFor()
throws InterruptedException
Processオブジェクトが表すプロセスが終了するまで現在のスレッドを待機させます。サブプロセスがすでに終了している場合、このメソッドはただちに復帰します。サブプロセスが終了していない場合、呼出し側スレッドはサブプロセスが終了するまでブロックされます。Processオブジェクトが表すサブプロセスの終了コード。0は正常終了を示す。InterruptedException - 現在のスレッドが待機中にほかのスレッドによって割り込まれた場合、待機を終了してInterruptedExceptionがスローされる。public boolean waitFor(long timeout,
TimeUnit unit)
throws InterruptedException
Processオブジェクトが表すサブプロセスが終了するか、指定された待機時間が経過するまで現在のスレッドを待機させます。
サブプロセスがすでに終了している場合、このメソッドは値trueでただちに復帰します。プロセスがまだ終了しておらず、タイムアウト値がゼロ以下の場合、このメソッドは値falseでただちに復帰します。
このメソッドのデフォルト実装では、exitValueをポーリングしてプロセスが終了しているかどうかを確認します。このクラスの具象実装では、このメソッドをより効率的な実装でオーバーライドすることを強くお薦めします。
timeout - 待機する最長時間unit - timeout引数の時間単位true、サブプロセスが終了する前に待機時間が経過した場合はfalse。InterruptedException - 待機中に現在のスレッドで割込みが発生した場合。NullPointerException - 単位がnullの場合public abstract int exitValue()
Processオブジェクトが表すサブプロセスの終了コード。0は正常終了を示す。IllegalThreadStateException - このProcessオブジェクトが表すサブプロセスがまだ終了していない場合public abstract void destroy()
Processオブジェクトが表すサブプロセスが強制終了されるかどうかは、実装によって異なります。public Process destroyForcibly()
Processオブジェクトが表すサブプロセスは強制終了されます。
このメソッドのデフォルト実装では、destroy()を呼び出すため、プロセスが強制終了されない場合があります。このクラスの具象実装では、このメソッドを準拠した実装でオーバーライドすることを強くお薦めします。ProcessBuilder.start()およびRuntime.exec(java.lang.String)から返されたProcessオブジェクトに対してこのメソッドを呼び出すと、プロセスが強制終了されます。
注: サブプロセスがただちに終了しない場合があります。つまり、destroyForcibly()が呼び出された後ほんのしばらくの間、isAlive()がtrueを返すことがあります。このメソッドは、必要に応じてwaitFor()にチェーンされることがあります。
Processオブジェクト。public boolean isAlive()
Processが表すサブプロセスが生存しているかどうかを判定します。Processオブジェクトが表すサブプロセスがまだ終了していない場合はtrue。 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.