- 所有父级接口:
Comparable<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 实例视为可互换的,不应使用实例进行同步,否则可能会发生不可预测的行为。例如,在未来的版本中,同步可能会失败。使用equals或compareTo方法比较 ProcessHandles。 - 自从:
- 9
- 参见:
-
内部类总结
内部类 -
方法总结
修饰符和类型方法描述static Stream<ProcessHandle>返回当前进程可见的所有进程的快照。children()返回进程当前直接子进程的快照。intcompareTo(ProcessHandle other) 将此 ProcessHandle 与指定的 ProcessHandle 进行比较以获取订单。static ProcessHandlecurrent()返回当前进程的 ProcessHandle。返回进程后代的快照。booleandestroy()请求终止进程。boolean请求强制终止进程。boolean返回true如果other对象是非空的,具有相同的实现,并且表示相同的系统进程;否则返回false。inthashCode()返回此 ProcessHandle 的哈希码值。info()返回有关进程的信息快照。booleanisAlive()测试这个ProcessHandle代表的进程是否存活。static Optional<ProcessHandle>of(long pid) 为现有本机进程返回Optional<ProcessHandle>。onExit()返回CompletableFuture<ProcessHandle>以终止进程。parent()为父进程返回一个Optional<ProcessHandle>。longpid()返回进程的本机进程 ID。boolean如果destroy()的执行正常终止进程,则返回true。
-
方法详情
-
pid
long pid()- 返回:
- 进程的本机进程 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()返回进程当前直接子进程的快照。直接子进程的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
返回当前进程可见的所有进程的快照。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 info()返回有关进程的信息快照。ProcessHandle.Info实例具有访问器方法,如果可用则返回有关进程的信息。- 返回:
- 有关进程的信息快照,始终为非空
-
onExit
CompletableFuture <ProcessHandle > onExit()返回CompletableFuture<ProcessHandle>以终止进程。CompletableFuture提供触发依赖函数或操作的能力,这些函数或操作可以在进程终止时同步或异步运行。当进程终止时,无论进程的退出状态如何,CompletableFuture 都是completed。可以多次调用onExit方法以在进程退出时调用独立的操作。调用
onExit().get()等待进程终止并返回 ProcessHandle。未来可用于检查进程是否为done或wait以使其终止。CancellingCompleteableFuture 不影响进程。- API 注意:
-
在 ComputableFuture 完成并调用相关操作之前,可以观察到该进程已终止并显示
isAlive()。 - 返回:
-
ProcessHandle 的新
CompletableFuture<ProcessHandle> - 抛出:
IllegalStateException- 如果进程是当前进程
-
supportsNormalTermination
boolean supportsNormalTermination() -
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 方法必须产生相同的整数结果。 -
equals
返回true如果other对象是非空的,具有相同的实现,并且表示相同的系统进程;否则返回false。 -
compareTo
将此 ProcessHandle 与指定的 ProcessHandle 进行比较以获取订单。顺序未指定,但与Object.equals(java.lang.Object)一致,当且仅当 ProcessHandle 的两个实例具有相同的实现并表示相同的系统进程时,它返回true。仅支持相同实现的对象之间的比较。如果尝试相互比较ProcessHandles 的两个不同实现,则抛出ClassCastException。- 指定者:
compareTo在接口Comparable<ProcessHandle>中- 参数:
other- 要比较的 ProcessHandle- 返回:
- 负整数、零或正整数,因为此对象小于、等于或大于指定对象。
- 抛出:
NullPointerException- 如果指定对象为空ClassCastException- 如果指定对象与该对象不属于同一类
-