Module  java.base
软件包  java.lang

Interface ProcessHandle

  • All Superinterfaces:
    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等待进程终止,并可能触发依赖操作。

    工厂方法使用SecurityManager检查RuntimePermission("manageProcess")限制对ProcessHandles的访问 控制进程的能力也受到本地系统的限制,因此ProcessHandle不比本机应用程序允许的更多地访问或控制本机进程。

    实现要求:
    在ProcessHandles不能被支持的情况下,工厂方法必须始终抛出UnsupportedOperationException 该类的方法抛出UnsupportedOperationException如果操作系统不允许访问查询或杀死进程。

    ProcessHandle静态工厂方法返回的实例是value-based ,不可变且线程安全。 对这些ProcessHandle实例的使用身份敏感操作(包括引用等式( == ),身份哈希码或同步)可能会产生不可预测的结果,应该避免使用。 使用equalscompareTo方法来比较ProcessHandles。

    从以下版本开始:
    9
    另请参见:
    Process
    • 方法详细信息

      • pid

        long pid​()
        返回进程的本机进程ID。 本地进程ID是操作系统分配给进程的标识号。 操作系统可以在进程终止之后重用进程ID。 使用equalscompareTo来比较ProcessHandles。
        结果
        进程的本机进程ID
        异常
        UnsupportedOperationException - 如果实现不支持此操作
      • of

        static Optional<ProcessHandle> of​(long pid)
        返回现有本机进程的 Optional<ProcessHandle>
        参数
        pid - 本机进程ID
        结果
        一个Optional<ProcessHandle>的PID进程; 如果进程不存在,则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 Stream,用于流程的直接子进程
        异常
        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实例具有访问器方法,返回有关进程的信息(如果可用)。

        结果
        关于进程的信息的快照,始终为非空
      • onExit

        CompletableFuture<ProcessHandle> onExit​()
        返回一个CompletableFuture<ProcessHandle>终止进程。 CompletableFuture提供了在进程终止时触发可以同步或异步运行的从属功能或动作的功能。 当进程已经终止时,无论进程的退出状态如何,CompletableFuture为completed 当进程退出时,可以多次调用onExit方法来调用独立动作。

        调用onExit().get()等待进程终止并返回ProcessHandle。 未来可以用来检查过程是否为donewait ,以便终止。 Cancelling CompleteableFuture不会影响进程。

        API Note:
        在ComputableFuture完成并调用依赖操作之前,可以观察到该过程已终止于 isAlive()
        结果
        一个新的 CompletableFuture<ProcessHandle>为ProcessHandle
        异常
        IllegalStateException - 如果进程是当前进程
      • supportsNormalTermination

        boolean supportsNormalTermination​()
        返回true如果执行destroy()正常终止进程。 返回false如果执行destroy强制立即终止进程。
        结果
        true如果执行destroy()正常终止进程; 否则, destroy()强制终止进程
      • destroy

        boolean destroy​()
        请求进程被杀死。 由此ProcessHandle对象表示的进程是否为normally terminated否是实现依赖。 强制流程破坏被定义为流程的即时终止,而正常的终止允许流程干净地关闭。 如果该过程不存在,则不采取任何行动。 操作系统访问控制可能会阻止进程被杀死。

        CompletableFutureonExit()completed当进程已经终止。

        注意:进程可能不会立即终止。 例如, isAlive()可能会在destroy()被调用后的destroy()返回true。

        结果
        true如果成功请求终止,否则为 false
        异常
        IllegalStateException - 如果进程是当前进程
      • destroyForcibly

        boolean destroyForcibly​()
        要求进程被强行杀死。 ProcessHandle对象表示的进程被强制终止。 强制流程破坏被定义为流程的即时终止,而正常的终止允许流程干净地关闭。 如果该过程不存在,则不采取任何行动。 操作系统访问控制可能会阻止进程被杀死。

        CompletableFutureonExit()completed当进程已经终止。

        注意:进程可能不会立即终止。 例如, isAlive()可能会在destroyForcibly()被调用后的destroyForcibly()返回true。

        结果
        true如果成功请求终止,否则为 false
        异常
        IllegalStateException - 如果进程是当前进程
      • isAlive

        boolean isAlive​()
        测试此ProcessHandle表示的过程是否存活。 流程终止是具体的实现和操作系统。 只要PID有效,该过程就被认为是活着的。
        结果
        true如果由此 ProcessHandle对象表示的进程尚未终止
      • equals

        boolean equals​(Object other)
        如果other对象为非空,则返回true ,具有相同的实现,并表示相同的系统进程; 否则返回false
        重写:
        equals在类 Object
        Implementation Note:
        具有相同PID的ProcessHandles表示相同的系统进程是具体的实现。 ProcessHandle实现应包含唯一标识进程的附加信息。 例如,可以使用该过程的开始时间来确定PID是否已被重新使用。 对于具有相同PID的两个ProcessHandles, equals的实现应该返回true ,除非有信息来区分它们。
        参数
        other - 另一个对象
        结果
        true如果other对象是非空的,是同一个实现类并表示相同的系统进程; 否则返回false
        另请参见:
        Object.hashCode()HashMap
      • compareTo

        int compareTo​(ProcessHandle other)
        将此ProcessHandle与指定的ProcessHandle进行比较。 订单未指定,但与Object.equals(java.lang.Object)一致,当且仅当ProcessHandle的两个实例具有相同的实现并且表示相同的系统进程时,该值将返回true 只有相同实现的对象之间才支持比较。 如果尝试相互比较ProcessHandle的两个不同实现,则抛出ClassCastException
        Specified by:
        compareTo在接口 Comparable<ProcessHandle>
        参数
        other - 要比较的ProcessHandle
        结果
        负整数,零或正整数,因为该对象小于,等于或大于指定对象。
        异常
        NullPointerException - 如果指定的对象为空
        ClassCastException - if the specified object is not of same class as this object