模块 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 可用于等待进程终止,并可能触发相关操作。

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

实现要求:
在无法支持 ProcessHandles 的情况下,工厂方法必须一致地抛出 UnsupportedOperationException 。如果操作系统不允许访问查询或终止进程,则此类的方法将抛出 UnsupportedOperationException

ProcessHandle 静态工厂方法返回 value-based 、不可变且线程安全的实例。程序员应该将 equal 实例视为可互换的,不应使用实例进行同步,否则可能会发生不可预测的行为。例如,在未来的版本中,同步可能会失败。使用 equalscompareTo 方法比较 ProcessHandles。

自从:
9
参见:
  • 方法详情

    • 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 进程没有子进程。

      Note that processes are created and terminate asynchronously. There is no guarantee that a process is alive .

      返回:
      ProcessHandles 的顺序 Stream,用于作为进程的直接子进程的进程
      抛出:
      SecurityException - 如果安装了安全管理器并且它拒绝 RuntimePermission("manageProcess")
    • descendants

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

      Note that processes are created and terminate asynchronously. There is no guarantee that a process is alive .

      返回:
      ProcessHandles 的顺序 Stream,用于作为进程后代的进程
      抛出:
      SecurityException - 如果安装了安全管理器并且它拒绝 RuntimePermission("manageProcess")
    • allProcesses

      static Stream <ProcessHandle > allProcesses()
      返回当前进程可见的所有进程的快照。

      Note that processes are created and terminate asynchronously. There is no guarantee that a process in the stream is alive or that no other processes may have been created since the inception of the snapshot.

      返回:
      所有进程的 ProcessHandles 流
      抛出:
      SecurityException - 如果安装了安全管理器并且它拒绝 RuntimePermission("manageProcess")
      UnsupportedOperationException - 如果实现不支持这个操作
    • info

      返回有关进程的信息快照。

      ProcessHandle.Info 实例具有访问器方法,如果可用则返回有关进程的信息。

      返回:
      有关进程的信息快照,始终为非空
    • 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
      返回:
      true 如果 destroy() 的执行正常终止进程;否则,destroy() 强行终止进程
    • destroy

      boolean destroy()
      请求终止进程。此 ProcessHandle 对象表示的进程是否为 normally terminated 取决于实现。强制进程销毁定义为立即终止进程,而正常终止允许进程干净地关闭。如果进程不活动,则不采取任何操作。操作系统访问控制可能会阻止进程被终止。

      当进程终止时,来自 onExit() CompletableFuture completed

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

      返回:
      true 如果成功请求终止,否则 false
      抛出:
      IllegalStateException - 如果进程是当前进程
    • destroyForcibly

      boolean destroyForcibly()
      请求强制终止进程。此 ProcessHandle 对象表示的进程被强制终止。强制进程销毁定义为立即终止进程,而正常终止允许进程干净地关闭。如果进程不活动,则不采取任何操作。操作系统访问控制可能会阻止进程被终止。

      当进程终止时,来自 onExit() CompletableFuture completed

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

      返回:
      true 如果成功请求终止,否则 false
      抛出:
      IllegalStateException - 如果进程是当前进程
    • isAlive

      boolean isAlive()
      测试这个 ProcessHandle 代表的进程是否存活。进程终止是特定于实现和操作系统的。只要 PID 有效,进程就被认为是存活的。
      返回:
      true 如果此 ProcessHandle 对象表示的进程尚未终止
    • hashCode

      int hashCode()
      返回此 ProcessHandle 的哈希码值。哈希码值遵循 Object.hashCode() 的一般合同。该值是 pid() 值的函数,并且可能是唯一标识进程的附加信息的函数。如果根据 equals 方法两个 ProcessHandles 相等,则对这两个对象中的每一个调用 hashCode 方法必须产生相同的整数结果。
      重写:
      hashCode 在类 Object
      返回:
      此对象的哈希码值
      参见:
    • equals

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

      int compareTo(ProcessHandle  other)
      将此 ProcessHandle 与指定的 ProcessHandle 进行比较以获取订单。顺序未指定,但与 Object.equals(java.lang.Object) 一致,当且仅当 ProcessHandle 的两个实例具有相同的实现并表示相同的系统进程时,它返回 true。仅支持相同实现的对象之间的比较。如果尝试相互比较 ProcessHandle s 的两个不同实现,则抛出 ClassCastException
      指定者:
      compareTo 在接口 Comparable<ProcessHandle>
      参数:
      other - 要比较的 ProcessHandle
      返回:
      负整数、零或正整数,因为此对象小于、等于或大于指定对象。
      抛出:
      NullPointerException - 如果指定对象为空
      ClassCastException - 如果指定对象与该对象不属于同一类