モジュール 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静的ファクトリ・メソッドは、値ベースで不変でスレッドセーフなインスタンスを返します。 ProcessHandleのこれらのインスタンスでのアイデンティティ依存操作(参照等価(==)、アイデンティティ・ハッシュ・コードまたは同期を含む)の使用は、予測できない結果になる可能性があるため、避ける必要があります。 equalsまたはcompareToメソッドを使用して、ProcessHandlesを比較します。

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

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

      すべてのメソッド 静的メソッド インスタンス・メソッド 抽象メソッド
      修飾子と型 メソッド 説明
      static Stream<ProcessHandle> allProcesses()
      現在のプロセスから参照可能なすべてのプロセスのスナップショットを返します。
      Stream<ProcessHandle> children()
      プロセスの現在の直接の子のスナップショットを返します。
      int compareTo​(ProcessHandle other)
      このProcessHandleを、指定された順序のProcessHandleと比較します。
      static ProcessHandle current()
      現在のプロセスのProcessHandleを返します。
      Stream<ProcessHandle> descendants()
      プロセスの子孫のスナップショットを返します。
      boolean destroy()
      プロセスを強制終了するように要求します。
      boolean destroyForcibly()
      プロセスを強制的に強制終了するように要求します。
      boolean equals​(Object other)
      otherオブジェクトがnull以外で、同じ実装であり、同じシステム・プロセスを表す場合はtrueを戻し、それ以外の場合はfalseを戻します。
      int hashCode()
      このProcessHandleのハッシュ・コード値を返します。
      ProcessHandle.Info info()
      プロセスに関する情報のスナップショットを返します。
      boolean isAlive()
      このProcessHandleで表されるプロセスが有効かどうかをテストします。
      static Optional<ProcessHandle> of​(long pid)
      既存のネイティブ・プロセスのOptional<ProcessHandle>を返します。
      CompletableFuture<ProcessHandle> onExit()
      プロセスの終了のCompletableFuture<ProcessHandle>を返します。
      Optional<ProcessHandle> parent()
      親プロセスのOptional<ProcessHandle>を返します。
      long pid()
      プロセスのネイティブ・プロセスIDを返します。
      boolean supportsNormalTermination()
      destroy()の実装が通常プロセスを終了する場合は、trueを返します。
    • メソッドの詳細

      • pid

        long pid()
        プロセスのネイティブ・プロセスIDを返します。 ネイティブ・プロセスIDは、オペレーティング・システムがプロセスに割り当てる識別番号です。 オペレーティング・システムは、プロセスの終了後にプロセスIDを再利用できます。 equalsまたはcompareToを使用して、ProcessHandlesを比較します。
        戻り値:
        プロセスのネイティブ・プロセス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> parent()
        親プロセスのOptional<ProcessHandle>を返します。 ゾンビ状態のプロセスには通常、親がありません。
        戻り値:
        親プロセスのOptional<ProcessHandle>。子プロセスに親がない場合、または親が使用できない場合は、オペレーティング・システムの制限が原因でOptionalが空になります。
        例外:
        SecurityException - セキュリティ・マネージャがインストールされ、RuntimePermission("manageProcess")が拒否された場合
      • children

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

        プロセスは非同期に作成および終了します。 プロセスがaliveである保証はありません。

        戻り値:
        プロセスの直接の子であるプロセスに対するProcessHandlesの順次ストリーム
        例外:
        SecurityException - セキュリティ・マネージャがインストールされ、RuntimePermission("manageProcess")が拒否された場合
      • descendants

        Stream<ProcessHandle> descendants()
        プロセスの子孫のスナップショットを返します。 プロセスの子孫は、プロセスの子とそれらの子の子孫を、再帰的に加えたものです。 通常、not aliveであるプロセスには子がありません。

        プロセスは非同期に作成および終了します。 プロセスがaliveである保証はありません。

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

        static Stream<ProcessHandle> allProcesses()
        現在のプロセスから参照可能なすべてのプロセスのスナップショットを返します。

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

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

        ProcessHandle.Info info()
        プロセスに関する情報のスナップショットを返します。

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

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

        CompletableFuture<ProcessHandle> onExit()
        プロセスの終了のCompletableFuture<ProcessHandle>を返します。 CompletableFutureには、プロセスの終了時に同期的または非同期的に実行される依存関数またはアクションをトリガーする機能があります。 プロセスが終了すると、プロセスの終了ステータスに関係なく、CompletableFutureはcompletedになります。 onExitメソッドを複数回コールして、プロセスの終了時に独立したアクションを起動できます。

        onExit().get()をコールすると、プロセスが終了するまで待機し、ProcessHandleが返されます。 将来は、プロセスがdoneであるか、waitで終了するかを確認するために使用できます。 Cancelling CompleteableFutureはプロセスに影響を与えません。

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