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

インタフェースProcessHandle

すべてのスーパー・インタフェース:
Comparable<ProcessHandle>

public interface ProcessHandle extends Comparable<ProcessHandle>
ProcessHandleは、ネイティブ・プロセスを識別し、制御します。 各プロセスは、有効性を監視したり、その子をリストしたり、プロセスに関する情報を取得したり、破棄したりできます。 比較すると、Processインスタンスは現在のプロセスによって起動され、さらにプロセスの入力、出力およびエラー・ストリームへのアクセスを提供します。

ネイティブ・プロセスIDは、オペレーティング・システムがプロセスに割り当てる識別番号です。 プロセスID値の範囲は、オペレーティング・システムによって異なります。 たとえば、組み込みシステムでは16ビット値を使用できます。 プロセスに関するステータス情報は、ネイティブ・システムから取得され、非同期的に変更される可能性があります。プロセスは、自発的に作成または終了できます。 プロセスが終了し、プロセスIDが新しいプロセスに再使用されるまでの時間は予測できません。 競合状態は、プロセスのステータスのチェックとそれに対する処理の間に存在できます。 ProcessHandlesを使用すると、基礎となるプロセスの存続性またはアイデンティティに関する仮定を回避できます。

各ProcessHandleは、ネイティブ・システム内のプロセスを識別し、制御できます。 ProcessHandlesは、ファクトリ・メソッドcurrent()of(long)children()descendants()parent()allProcesses()から返されます。

ProcessBuilderによって作成されたProcessインスタンスは、プロセスに関する情報を提供するProcessHandleに対して問い合せることができます。 ProcessHandle参照は自由に配布しないでください。

onExit()から使用可能なCompletableFutureを使用して、プロセスの終了を待機し、依存アクションをトリガーできます。

ファクトリ・メソッドは、RuntimePermission("manageProcess")をチェックするSecurityManagerを使用してProcessHandlesへのアクセスを制限します。 プロセスを制御する機能は、ネイティブ・システムによっても制限されます。ProcessHandleは、ネイティブ・アプリケーションによって許可されるよりも、ネイティブ・プロセスへのアクセスや制御を行いません。

実装要件:
ProcessHandlesがサポートされない場合、ファクトリ・メソッドは一貫してUnsupportedOperationExceptionをスローする必要があります。 オペレーティング・システムがプロセスの問合せまたは強制終了へのアクセスを許可していない場合、このクラスのメソッドはUnsupportedOperationExceptionをスローします。

ProcessHandle静的ファクトリ・メソッドは、value-based、不変およびスレッド・セーフであるインスタンスを返します。 プログラマは、equalのインスタンスを交換可能として処理し、同期にインスタンスを使用しないようにする必要があります。そうしないと、予期しない動作が発生する可能性があります。 たとえば、将来のリリースでは、同期が失敗する可能性があります。 equalsまたはcompareToメソッドを使用して、ProcessHandlesを比較します。

導入されたバージョン:
9
関連項目:
  • ネストされたクラスのサマリー

    ネストされたクラス
    修飾子と型
    インタフェース
    説明
    static interface 
    プロセスに関する情報スナップショット。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    現在のプロセスに表示されるすべてのプロセスのスナップショットを返します。
    プロセスの現在の直接の子のスナップショットを返します。
    int
    このProcessHandleを、指定されたProcessHandleと順序を比較します。
    現在のプロセスのProcessHandleを返します。
    プロセスの子孫のスナップショットを返します。
    boolean
    プロセスを強制終了するようにリクエストします。
    boolean
    プロセスを強制的に強制終了するようにリクエストします。
    boolean
    equals(Object other)
    otherオブジェクトがnull以外で、実装が同じで、同じシステム・プロセスを表す場合はtrueを戻し、それ以外の場合はfalseを戻します。
    int
    このProcessHandleのハッシュ・コード値を返します。
    プロセスに関する情報のスナップショットを返します。
    boolean
    このProcessHandleによって表されるプロセスが動作しているかどうかをテストします。
    of(long pid)
    既存のネイティブ・プロセスのOptional<ProcessHandle>を返します。
    プロセスの終了についてCompletableFuture<ProcessHandle>を返します。
    親プロセスのOptional<ProcessHandle>を返します。
    long
    pid()
    プロセスのネイティブ・プロセスIDを返します。
    boolean
    destroy()の実装が通常プロセスを終了する場合は、trueを返します。
  • メソッドの詳細

    • pid

      long pid()
      プロセスのネイティブ・プロセスIDを返します。 ネイティブ・プロセスIDは、オペレーティング・システムがプロセスに割り当てる識別番号です。 オペレーティング・システムは、プロセスの終了後にプロセスIDを再利用できます。 ProcessHandlesを比較するには、equalsまたはcompareToを使用します。
      戻り値:
      プロセスのネイティブ・プロセスID
      例外:
      UnsupportedOperationException - 実装がこの操作をサポートしていない場合
    • of

      static Optional<ProcessHandle> of(long pid)
      既存のネイティブ・プロセスのOptional<ProcessHandle>を返します。
      パラメータ:
      pid - ネイティブ・プロセスID
      戻り値:
      プロセスのPIDのOptional<ProcessHandle>。プロセスが存在しない場合、Optionalは空です。
      例外:
      SecurityException - セキュリティ・マネージャがインストールされていて、RuntimePermission("manageProcess")を拒否した場合
      UnsupportedOperationException - 実装がこの操作をサポートしていない場合
    • current

      static ProcessHandle current()
      現在のプロセスのProcessHandleを返します。 ProcessHandleは現在のプロセスの破棄には使用できません。かわりにSystem.exitを使用してください。
      戻り値:
      現在のプロセスのProcessHandle
      例外:
      SecurityException - セキュリティ・マネージャがインストールされていて、RuntimePermission("manageProcess")を拒否した場合
      UnsupportedOperationException - 実装がこの操作をサポートしていない場合
    • parent

      親プロセスのOptional<ProcessHandle>を返します。 ゾンビ状態のプロセスは、通常、親を持たないことに注意してください。
      戻り値:
      親プロセスのOptional<ProcessHandle>Optionalは、子プロセスに親がない場合、または親が使用できない場合は、オペレーティング・システムの制限が原因で空になります
      例外:
      SecurityException - セキュリティ・マネージャがインストールされていて、RuntimePermission("manageProcess")を拒否した場合
    • children

      Stream<ProcessHandle> children()
      プロセスの現在の直接の子のスナップショットを返します。 直接の子プロセスのparent()がプロセスです。 通常、not aliveのプロセスは子を持ちません。

      プロセスが作成され、非同期で終了するNote。 プロセスがaliveである保証はありません。

      戻り値:
      プロセスの直接の子プロセスであるプロセスの一連のProcessHandle
      例外:
      SecurityException - セキュリティ・マネージャがインストールされていて、RuntimePermission("manageProcess")を拒否した場合
    • descendants

      Stream<ProcessHandle> descendants()
      プロセスの子孫のスナップショットを返します。 プロセスの子孫は、プロセスの子とそれらの子の子孫です。 通常、not aliveのプロセスは子を持ちません。

      プロセスが作成され、非同期で終了するNote。 プロセスがaliveである保証はありません。

      戻り値:
      プロセスの子孫であるプロセスのProcessHandlesの連続ストリーム
      例外:
      SecurityException - セキュリティ・マネージャがインストールされていて、RuntimePermission("manageProcess")を拒否した場合
    • allProcesses

      static Stream<ProcessHandle> allProcesses()
      現在のプロセスに表示されるすべてのプロセスのスナップショットを返します。

      プロセスが作成され、非同期で終了するNote。 ストリーム内のプロセスが動作していること、またはスナップショットの開始以降に他のプロセスが作成されていないという保証はありません。

      戻り値:
      すべてのプロセスのProcessHandleのストリーム
      例外:
      SecurityException - セキュリティ・マネージャがインストールされていて、RuntimePermission("manageProcess")を拒否した場合
      UnsupportedOperationException - 実装がこの操作をサポートしていない場合
    • info

      プロセスに関する情報のスナップショットを返します。

      ProcessHandle.Infoインスタンスには、プロセスに関する情報(使用可能な場合)を返すアクセサ・メソッドがあります。

      戻り値:
      プロセスに関する情報のスナップショット(常にnull以外)
    • onExit

      プロセスの終了についてCompletableFuture<ProcessHandle>を返します。 CompletableFutureは、プロセスの終了時に同期または非同期に実行できる依存ファンクションまたはアクションをトリガーする機能を提供します。 プロセスが終了すると、プロセスの終了ステータスに関係なく、CompletableFutureはcompletedになります。 onExitメソッドを複数回呼び出して、プロセスの終了時に独立したアクションを呼び出すことができます。

      onExit().get()をコールすると、プロセスが終了するまで待機し、ProcessHandleが返されます。 将来は、プロセスがdonewaitかをチェックして終了するために使用できます。 CompleteableFutureのCancellingはプロセスに影響しません。

      APIのノート:
      ComputableFutureが完了して依存アクションが起動される前に、プロセスがisAlive()で終了していることがわかります。
      戻り値:
      ProcessHandle用の新しいCompletableFuture<ProcessHandle>
      例外:
      IllegalStateException - プロセスが現在のプロセスである場合
    • supportsNormalTermination

      boolean supportsNormalTermination()
      destroy()の実装が通常プロセスを終了する場合は、trueを返します。 destroyの実装が強制的に終了し、すぐにプロセスを終了する場合は、falseを返します。
      戻り値:
      destroy()の実装が通常プロセスを終了する場合はtrue。そうでない場合は、destroy()によってプロセスが強制的に終了されます
    • destroy

      boolean destroy()
      プロセスを強制終了するようにリクエストします。 このProcessHandleオブジェクトによって表されるプロセスがnormally terminatedかどうかは、実装に依存します。 強制的なプロセス破棄は、プロセスの即時終了として定義されますが、通常終了では、プロセスは正常に停止できます。 プロセスが動作していない場合、アクションは実行されません。 オペレーティング・システムのアクセス制御によって、プロセスが強制終了されない場合があります。

      プロセスが終了すると、onExit()CompletableFuturecompletedになります。

      ノート: プロセスはすぐには終了できません。 たとえば、isAlive()は、destroy()がコールされた後の短い期間に対してtrueを返す場合があります。

      戻り値:
      終了が正常にリクエストされた場合はtrue、それ以外の場合はfalse
      例外:
      IllegalStateException - プロセスが現在のプロセスである場合
    • destroyForcibly

      boolean destroyForcibly()
      プロセスを強制的に強制終了するようにリクエストします。 このProcessHandleオブジェクトで表されるプロセスは強制的に終了します。 強制的なプロセス破棄は、プロセスの即時終了として定義されますが、通常終了では、プロセスは正常に停止できます。 プロセスが動作していない場合、アクションは実行されません。 オペレーティング・システムのアクセス制御によって、プロセスが強制終了されない場合があります。

      プロセスが終了すると、onExit()CompletableFuturecompletedになります。

      ノート: プロセスはすぐには終了できません。 たとえば、isAlive()は、destroyForcibly()がコールされた後の短い期間に対してtrueを返す場合があります。

      戻り値:
      終了が正常にリクエストされた場合はtrue、それ以外の場合はfalse
      例外:
      IllegalStateException - プロセスが現在のプロセスである場合
    • isAlive

      boolean isAlive()
      このProcessHandleによって表されるプロセスが動作しているかどうかをテストします。 プロセスの終了は、実装およびオペレーティング・システム固有です。 プロセスは、PIDが有効であるかぎり、存続中とみなされます。
      戻り値:
      このProcessHandleオブジェクトによって表されるプロセスがまだ終了していない場合はtrue
    • hashCode

      int hashCode()
      このProcessHandleのハッシュ・コード値を返します。 hashcode値は、Object.hashCode()の一般規約に従います。 この値は、pid()値の関数であり、プロセスを一意に識別するための追加情報の関数である場合があります。 2つのProcessHandlesがequalsメソッドに従って等しい場合、2つのオブジェクトのそれぞれでhashCodeメソッドをコールすると、同じ整数の結果が生成される必要があります。
      オーバーライド:
      hashCode、クラスObject
      戻り値:
      このオブジェクトのハッシュ・コード値
      関連項目:
    • equals

      boolean equals(Object other)
      otherオブジェクトがnull以外で、実装が同じで、同じシステム・プロセスを表す場合はtrueを戻し、それ以外の場合はfalseを戻します。
      オーバーライド:
      equals、クラスObject
      実装上のノート:
      同じPIDを持つProcessHandlesが同じシステム・プロセスを表すかどうかは、実装固有です。 ProcessHandle実装には、プロセスを一意に識別するための追加情報が含まれている必要があります。 たとえば、プロセスの開始時間を使用して、PIDが再使用されたかどうかを判断できます。 equalsの実装は、区別する情報がないかぎり、同じPIDを持つ2つのProcessHandlesに対してtrueを返す必要があります。
      パラメータ:
      other - 別のオブジェクト
      戻り値:
      otherオブジェクトがnullでない場合、trueは、同じ実装クラスに属し、同じシステム・プロセスを表します。それ以外の場合は、falseを返します
      関連項目:
    • compareTo

      int compareTo(ProcessHandle other)
      このProcessHandleを、指定されたProcessHandleと順序を比較します。 順序は指定されませんが、Object.equals(java.lang.Object)と一致します。これは、ProcessHandleの2つのインスタンスが同じ実装で、同じシステム・プロセスを表す場合にのみtrueを返します。 比較は、同じ実装のオブジェクト間でのみサポートされます。 ProcessHandleの2つの異なる実装を相互に比較しようとすると、ClassCastExceptionがスローされます。
      定義:
      インタフェースComparable<ProcessHandle>内のcompareTo
      パラメータ:
      other - 比較されるProcessHandle
      戻り値:
      このオブジェクトが指定されたオブジェクトより小さい場合は負の整数、等しい場合はゼロ、大きい場合は正の整数
      例外:
      NullPointerException - 指定されたオブジェクトがnullの場合
      ClassCastException - 指定されたオブジェクトがこのオブジェクトと同じクラスでない場合