-
- All Superinterfaces:
-
Comparable<ProcessHandle>
public interface ProcessHandle extends 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
这些实例上使用身份敏感操作(包括引用相等(==
),标识哈希码或同步)可能会产生不可预测的结果,应该避免使用。 使用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()
返回true
如果实施destroy()
正常终止的过程。
-
-
-
方法详细信息
-
pid
long pid()
- 结果
- 进程的本机进程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()
- 结果
- ProcessHandles的顺序Stream,用于进程的直接子进程
- 异常
-
SecurityException
- 如果已安装安全管理器并且它拒绝RuntimePermission(“manageProcess”)
-
descendants
Stream<ProcessHandle> descendants()
- 结果
- 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
。
-
destroy
boolean destroy()
请求该进程被杀死。 此ProcessHandle
对象表示的进程是否为normally terminated
是否依赖于实现。 强制进程销毁被定义为进程的立即终止,而正常终止允许进程干净地关闭。 如果进程不活动,则不执行任何操作。 操作系统访问控制可以防止进程被杀死。当进程终止时,
CompletableFuture
从onExit()
是completed
。注意:该过程可能不会立即终止。 例如,
isAlive()
可能会在destroy()
后的短暂时间内返回true。- 结果
-
true
如果成功请求终止,否则false
- 异常
-
IllegalStateException
- 如果该过程是当前过程
-
destroyForcibly
boolean destroyForcibly()
要求强制杀死该进程。 此ProcessHandle
对象表示的进程被强制终止。 强制进程销毁被定义为进程的立即终止,而正常终止允许进程干净地关闭。 如果进程不活动,则不执行任何操作。 操作系统访问控制可以防止进程被杀死。CompletableFuture
自onExit()
,当进程终止时为completed
。注意:该过程可能不会立即终止。 例如,
isAlive()
可能会在destroyForcibly()
后的短暂时间内返回true。- 结果
-
true
如果成功请求终止,否则false
- 异常
-
IllegalStateException
- 如果进程是当前进程
-
isAlive
boolean isAlive()
测试此ProcessHandle
表示的进程是否存在。 进程终止是特定于实现和操作系统的。 只要PID有效,该过程就被认为是活动的。- 结果
-
true
如果此ProcessHandle
对象表示的进程尚未终止
-
hashCode
int hashCode()
返回此ProcessHandle的哈希码值。 哈希码值遵循Object.hashCode()
的一般合同。 该值是pid()
值的函数,并且可以是用于唯一标识该过程的附加信息的函数。 如果两个ProcessHandle根据equals
方法相等,则对两个对象中的每个对象调用hashCode方法必须生成相同的整数结果。- 重写:
-
hashCode
,类Object
- 结果
- 此对象的哈希码值
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
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
-
-