模块  java.base
软件包  java.lang

Interface ProcessHandle

  • All Superinterfaces:
    Comparable<ProcessHandle>

    public interface ProcessHandleextends Comparable<ProcessHandle>
    ProcessHandle识别并提供对本机进程的控制。 可以监控每个单独的过程的活跃度,列出其子项,获取有关过程的信息或将其销毁。 相比之下, Process实例由当前进程启动,另外还提供对进程输入,输出和错误流的访问。

    本机进程ID是操作系统分配给进程的标识号。 进程标识值的范围取决于操作系统。 例如,嵌入式系统可能使用16位值。 从本机系统检索有关进程的状态信息,并且可能异步更改; 过程可以自发地创建或终止。 进程终止和进程ID重新用于新进程之间的时间是不可预测的。 在检查过程的状态和对过程进行操作之间可能存在竞争条件。 使用ProcessHandles时,请避免假设基础流程的活跃性或身份。

    每个ProcessHandle都识别并允许控制本机系统中的进程。 ProcessHandles从工厂方法返回current()of(long)children()descendants()parent()allProcesses()

    可以查询由4191743990602创建的Process实例,以查找提供有关Process的信息的ProcessHandle。 ProcessHandle引用不应该是免费分发的。

    CompletableFuture 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
        结果
        该过程的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的顺序Stream,用于进程的直接子进程
        异常
        SecurityException - 如果已安装安全管理器并且它拒绝RuntimePermission(“manageProcess”)
      • descendants

        Stream<ProcessHandle> descendants()
        返回进程后代的快照。 进程的后代是进程的子进程加上这些子进程的后代,递归地。 通常, not alive的进程没有子进程。

        请注意,创建进程并异步终止。 无法保证,该过程是alive

        结果
        ProcessHandles的顺序Stream,用于进程后代的进程
        异常
        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 Note:
        在ComputableFuture完成并调用相关操作之前,可以观察到该过程已终止于 isAlive()
        结果
        一个新的ProcessHandle CompletableFuture<ProcessHandle>
        异常
        IllegalStateException - 如果该过程是当前过程
      • supportsNormalTermination

        boolean supportsNormalTermination()
        返回true如果实施destroy()正常终止的过程。 如果强制执行destroy并立即终止进程,则返回false
        结果
        true如果执行destroy()通常会终止该过程; 否则, destroy()强行终止该过程
      • destroy

        boolean destroy()
        请求该进程被杀死。 ProcessHandle对象表示的进程是否为normally terminated是否依赖于实现。 强制进程销毁被定义为进程的立即终止,而正常终止允许进程干净地关闭。 如果进程不活动,则不执行任何操作。 操作系统访问控制可以防止进程被杀死。

        当进程终止时, CompletableFutureonExit()completed

        注意:该过程可能不会立即终止。 例如, isAlive()可能会在destroy()后的短暂时间内返回true。

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

        boolean destroyForcibly()
        要求强制杀死该进程。 ProcessHandle对象表示的进程被强制终止。 强制进程销毁被定义为进程的立即终止,而正常终止允许进程干净地关闭。 如果进程不活动,则不执行任何操作。 操作系统访问控制可以防止进程被杀死。

        CompletableFutureonExit() ,当进程终止时为completed

        注意:该过程可能不会立即终止。 例如, isAlive()可能会在destroyForcibly()后的短暂时间内返回true。

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

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

        boolean equals​(Object other)
        如果other对象为非null,则返回true ,具有相同的实现,并表示相同的系统进程; 否则返回false
        重写:
        equals在类 Object
        Implementation Note:
        具体实现是否具有相同PID的ProcessHandles表示相同的系统进程。 ProcessHandle实现应包含唯一标识进程的其他信息。 例如,该过程的开始时间可用于确定PID是否已被重新使用。 对于具有相同PID的两个ProcessHandle, equals的实现应该返回true ,除非有信息来区分它们。
        参数
        other - 另一个对象
        结果
        true如果other对象为非null,则具有相同的实现类并表示相同的系统进程; 否则返回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 - 如果指定的对象为null
        ClassCastException - if the specified object is not of same class as this object