- 所有超级接口:
-
Comparable<ProcessHandle>
Process
实例是由当前进程启动的,此外还提供对进程输入、输出和错误流的访问。
本机进程ID是操作系统分配给进程的标识号。进程ID值的范围取决于操作系统。例如,嵌入式系统可能使用16位值。有关进程的状态信息是从本机系统检索的,可能会异步更改;进程可能会被创建或自动终止。进程终止后到进程ID被用于新进程之间的时间是不可预测的。在使用ProcessHandles时,避免对底层进程的活动性或标识做出假设。
每个ProcessHandle标识并允许控制本机系统中的一个进程。ProcessHandles是从工厂方法current()
、of(long)
、children()
、descendants()
、parent()
和allProcesses()
返回的。
由ProcessBuilder
创建的Process
实例可以查询提供有关该进程的信息的ProcessHandle。ProcessHandle引用不应该被随意分发。
从onExit()
获得的CompletableFuture
可用于等待进程终止,并可能触发依赖动作。
工厂方法通过检查RuntimePermission("manageProcess")
的SecurityManager来限制对ProcessHandles的访问。控制进程的能力也受到本机系统的限制,ProcessHandle对本机进程的访问或控制不会超出本机应用程序允许的范围。
- 实现要求:
-
在无法支持ProcessHandles的情况下,工厂方法必须始终抛出
UnsupportedOperationException
。如果操作系统不允许访问查询或终止进程,则此类的方法会抛出UnsupportedOperationException
。ProcessHandle
静态工厂方法返回的实例是基于值的、不可变的和线程安全的。程序员应该将相等的实例视为可互换的,并且不应该将实例用于同步,否则可能会发生不可预测的行为。例如,在将来的版本中,同步可能会失败。使用equals
或compareTo
方法来比较ProcessHandles。 - 自版本:
- 9
- 参见:
-
Nested Class Summary
-
Method Summary
Modifier and TypeMethodDescriptionstatic Stream
<ProcessHandle> 返回当前进程可见的所有进程的快照。children()
返回当前进程的直接子进程的快照。int
compareTo
(ProcessHandle other) 将此ProcessHandle与指定的ProcessHandle进行比较以确定顺序。static ProcessHandle
current()
返回当前进程的ProcessHandle。返回进程的后代的快照。boolean
destroy()
请求终止进程。boolean
请求强制终止进程。boolean
如果other
对象非空,且是相同实现且表示相同的系统进程,则返回true
;否则返回false
。int
hashCode()
返回此ProcessHandle的哈希码值。info()
返回有关进程的信息的快照。boolean
isAlive()
测试由此ProcessHandle
表示的进程是否活动。static Optional
<ProcessHandle> of
(long pid) 返回现有本机进程的Optional<ProcessHandle>
。onExit()
返回用于进程终止的CompletableFuture<ProcessHandle>
。parent()
返回父进程的Optional<ProcessHandle>
。long
pid()
返回进程的本机进程ID。boolean
如果destroy()
的实现通常终止进程,则返回true
。
-
Method Details
-
pid
long pid()返回进程的本机进程ID。本机进程ID是操作系统分配给进程的标识号。操作系统可能在进程终止后重新使用进程ID。使用equals
或compareTo
来比较ProcessHandles。- 返回:
- 进程的本机进程ID
- 抛出:
-
UnsupportedOperationException
- 如果实现不支持此操作
-
of
返回现有本机进程的Optional<ProcessHandle>
。- 参数:
-
pid
- 本机进程ID - 返回:
-
进程的PID的
Optional<ProcessHandle>
;如果进程不存在,则Optional
为空 - 抛出:
-
SecurityException
- 如果已安装安全管理器并且拒绝了RuntimePermission("manageProcess") -
UnsupportedOperationException
- 如果实现不支持此操作
-
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流,用于表示该进程的直接子进程
- 抛出:
-
SecurityException
- 如果已安装安全管理器并且拒绝了RuntimePermission("manageProcess")
-
descendants
Stream<ProcessHandle> descendants()- 返回:
- 一个顺序的ProcessHandles流,用于表示该进程的后代
- 抛出:
-
SecurityException
- 如果已安装安全管理器并且拒绝了RuntimePermission("manageProcess")
-
allProcesses
返回当前进程可见的所有进程的快照。请注意,进程是异步创建和终止的。不能保证流中的进程是活动的,也不能保证自快照创建以来没有创建其他进程。
- 返回:
- 用于所有进程的ProcessHandles流
- 抛出:
-
SecurityException
- 如果已安装安全管理器并且拒绝了RuntimePermission("manageProcess") -
UnsupportedOperationException
- 如果实现不支持此操作
-
info
ProcessHandle.Info info()返回有关进程的信息的快照。ProcessHandle.Info
实例具有访问器方法,如果可用,则返回有关进程的信息。- 返回:
- 有关进程的信息的快照,始终非空
-
onExit
CompletableFuture<ProcessHandle> onExit()返回一个CompletableFuture<ProcessHandle>
,用于处理进程的终止。CompletableFuture
提供了在进程终止时触发依赖函数或操作的能力,这些函数或操作可以同步或异步运行。当进程终止时,CompletableFuture会被完成
,无论进程的退出状态如何。可以多次调用onExit
方法来在进程退出时调用独立的操作。调用
onExit().get()
会等待进程终止并返回ProcessHandle。可以使用future来检查进程是否完成
,或者等待
进程终止。取消CompletableFuture不会影响进程。- API注释:
- 在CompletableFuture完成和依赖操作被调用之前,可能会观察到进程已经终止。
- 返回:
-
一个新的
CompletableFuture<ProcessHandle>
用于ProcessHandle - 抛出:
-
IllegalStateException
- 如果进程是当前进程
-
supportsNormalTermination
boolean supportsNormalTermination()如果destroy()
的实现通常终止进程,则返回true
。如果destroy
的实现强制并立即终止进程,则返回false
。- 返回:
-
如果
destroy()
的实现通常终止进程,则返回true
;否则,destroy()
强制终止进程
-
destroy
boolean destroy()请求终止进程。由此ProcessHandle
对象表示的进程是否正常终止
是依赖于实现的。强制进程销毁被定义为立即终止进程,而正常终止允许进程干净地关闭。如果进程不活动,则不会采取任何操作。操作系统访问控制可能会阻止进程被终止。从
onExit()
返回的CompletableFuture在进程终止时被完成
。注意:进程可能不会立即终止。例如,
destroy()
调用后,isAlive()
可能会在短暂时间内返回true。- 返回:
-
如果成功请求了终止,则返回
true
,否则返回false
- 抛出:
-
IllegalStateException
- 如果进程是当前进程
-
destroyForcibly
boolean destroyForcibly()请求强制终止进程。由此ProcessHandle
对象表示的进程将被强制终止。强制进程销毁被定义为立即终止进程,而正常终止允许进程干净地关闭。如果进程不活动,则不会采取任何操作。操作系统访问控制可能会阻止进程被终止。从
onExit()
返回的CompletableFuture在进程终止时被完成
。注意:进程可能不会立即终止。例如,
destroyForcibly()
调用后,isAlive()
可能会在短暂时间内返回true。- 返回:
-
如果成功请求了终止,则返回
true
,否则返回false
- 抛出:
-
IllegalStateException
- 如果进程是当前进程
-
isAlive
boolean isAlive()测试由此ProcessHandle
表示的进程是否活动。进程终止是实现和操作系统特定的。只要PID有效,进程就被认为是活动的。- 返回:
-
如果由此
ProcessHandle
对象表示的进程尚未终止,则返回true
-
hashCode
int hashCode()为此ProcessHandle返回一个哈希码值。哈希码值遵循Object.hashCode()
的一般约定。该值是pid()
值的函数,可能是用于唯一标识进程的其他信息的函数。如果两个ProcessHandles根据equals
方法相等,则在这两个对象上调用hashCode方法必须产生相同的整数结果。 -
equals
如果other
对象非空,并且是相同实现且表示相同系统进程,则返回true
;否则返回false
。 -
compareTo
将此ProcessHandle与指定的ProcessHandle进行比较。顺序未指定,但与Object.equals(java.lang.Object)
一致,如果两个ProcessHandle实例是相同实现且表示相同系统进程,则返回true
。仅支持同一实现之间的比较。如果尝试相互比较两个不同实现的ProcessHandle,将抛出ClassCastException
。- 指定者:
-
compareTo
在接口Comparable<ProcessHandle>
- 参数:
-
other
- 要比较的ProcessHandle - 返回:
- 如果此对象小于、等于或大于指定对象,则返回负整数、零或正整数。
- 抛出:
-
NullPointerException
- 如果指定对象为null -
ClassCastException
- 如果指定对象与此对象不是同一类
-