-
- 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
实例的使用身份敏感操作(包括引用等式(==
),身份哈希码或同步)可能会产生不可预测的结果,应该避免使用。 使用equals
或compareTo
方法来比较ProcessHandles。 - 从以下版本开始:
- 9
- 另请参见:
-
Process
-
-
Nested Class Summary
Nested Classes Modifier and Type 接口 描述 static interface
ProcessHandle.Info
关于流程的信息快照。
-
方法摘要
所有方法 静态方法 接口方法 抽象方法 Default Methods Modifier and Type 方法 描述 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)
返回true
如果other
对象是非空的,是同一个实现,并且代表相同的系统进程; 否则返回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()
返回true
如果执行destroy()
正常终止进程。
-
-
-
方法详细信息
-
pid
long pid()
- 结果
- 进程的本机进程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()
- 结果
- 一个连续的ProcessHandles Stream,用于流程的直接子进程
- 异常
-
SecurityException
- 如果已安装安全管理器,并拒绝RuntimePermission(“manageProcess”)
-
descendants
Stream<ProcessHandle> descendants()
- 结果
- 用于进程的连续流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。 未来可以用来检查过程是否为done
或wait
,以便终止。Cancelling
CompleteableFuture不会影响进程。- API Note:
-
在ComputableFuture完成并调用依赖操作之前,可以观察到该过程已终止于
isAlive()
。 - 结果
-
一个新的
CompletableFuture<ProcessHandle>
为ProcessHandle - 异常
-
IllegalStateException
- 如果进程是当前进程
-
supportsNormalTermination
boolean supportsNormalTermination()
返回true
如果执行destroy()
正常终止进程。 返回false
如果执行destroy
强制立即终止进程。
-
destroy
boolean destroy()
请求进程被杀死。 由此ProcessHandle
对象表示的进程是否为normally terminated
否是实现依赖。 强制流程破坏被定义为流程的即时终止,而正常的终止允许流程干净地关闭。 如果该过程不存在,则不采取任何行动。 操作系统访问控制可能会阻止进程被杀死。CompletableFuture
从onExit()
是completed
当进程已经终止。注意:进程可能不会立即终止。 例如,
isAlive()
可能会在destroy()
被调用后的destroy()
返回true。- 结果
-
true
如果成功请求终止,否则为false
- 异常
-
IllegalStateException
- 如果进程是当前进程
-
destroyForcibly
boolean destroyForcibly()
要求进程被强行杀死。 此ProcessHandle
对象表示的进程被强制终止。 强制流程破坏被定义为流程的即时终止,而正常的终止允许流程干净地关闭。 如果该过程不存在,则不采取任何行动。 操作系统访问控制可能会阻止进程被杀死。CompletableFuture
从onExit()
是completed
当进程已经终止。注意:进程可能不会立即终止。 例如,
isAlive()
可能会在destroyForcibly()
被调用后的destroyForcibly()
返回true。- 结果
-
true
如果成功请求终止,否则为false
- 异常
-
IllegalStateException
- 如果进程是当前进程
-
isAlive
boolean isAlive()
测试此ProcessHandle
表示的过程是否存活。 流程终止是具体的实现和操作系统。 只要PID有效,该过程就被认为是活着的。- 结果
-
true
如果由此ProcessHandle
对象表示的进程尚未终止
-
hashCode
int hashCode()
返回此ProcessHandle的哈希码值。 哈希码值遵循Object.hashCode()
的一般合同。 该值是pid()
值的函数,可以是唯一标识过程的附加信息的函数。 如果根据equals
方法两个ProcessHandles相等,则在两个对象中的每个对象上调用hashCode方法必须产生相同的整数结果。- 重写:
-
hashCode
在Object
- 结果
- 该对象的哈希码值
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
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
-
-