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.