Java 9 进程 API 改进

2024 年 8 月 29 日 | 阅读 3 分钟

Java 在 Java 9 版本中改进了其进程 API,这有助于管理和控制操作系统进程。

在早期版本中,使用 Java 编程管理和控制操作系统进程很复杂。现在,添加了新的类和接口来执行此任务。

将新方法添加到 java.lang.Process 类中,如下表所示。

修饰符和类型方法描述
booleansupportsNormalTermination()如果 destroy() 的实现是正常终止进程,则返回 true,否则返回 false。
ProcessHandletoHandle()它为 Process 返回 ProcessHandle。
longpid()它返回进程的本机进程 ID。
Stream<ProcessHandle>children()它返回进程的直接子进程的快照。
Stream<ProcessHandle>descendants()它返回进程的后代进程的快照。
ProcessHandle.Infoinfo()它返回有关进程的信息的快照。
CompletableFuture<Process>onExit()它返回一个 CompletableFuture<Process> 用于进程的终止。

添加了新的接口 ProcessHandleProcessHandle.Info


Java ProcessHandle 接口

ProcessHandle 有助于处理和控制进程。我们可以监视进程,列出其子进程,获取信息等。

此接口包含返回基于值的、不可变的和线程安全的实例的静态工厂方法。

Java ProcessHandle 接口签名

此接口包含以下方法。

修饰符和类型方法描述
static Stream<ProcessHandle>allProcesses()它返回当前进程可见的所有进程的快照。
Stream<ProcessHandle>children()它返回进程的当前直接子进程的快照。
intcompareTo(ProcessHandle other)它将此 ProcessHandle 与指定的 ProcessHandle 进行排序比较。
static ProcessHandlecurrent()它返回当前进程的 ProcessHandle。
Stream<ProcessHandle>descendants()它返回进程的后代进程的快照。
booleandestroy()它请求终止该进程。
booleandestroyForcibly()它请求强制终止该进程。
booleanequals(Object other)如果其他对象为非空,实现相同,并且代表相同的系统进程,则返回 true;否则返回 false。
inthashCode()它返回此 ProcessHandle 的哈希码值。
ProcessHandle.Infoinfo()它返回有关进程的信息的快照。
booleanisAlive()它测试由该 ProcessHandle 表示的进程是否存活。
static Optional<ProcessHandle>of(long pid)它返回一个 Optional<ProcessHandle> 用于现有的本机进程。
CompletableFuture<ProcessHandle>onExit()它返回一个 CompletableFuture<ProcessHandle> 用于进程的终止。
Optional<ProcessHandle>parent()它返回一个 Optional<ProcessHandle> 用于父进程。
longpid()它返回进程的本机进程 ID。
booleansupportsNormalTermination()如果 destroy() 的实现正常终止进程,则返回 true。

Java ProcessHandle.Info 接口

它被添加到 Java 9 中,用于提供有关进程的信息。它是 ProcessHandle 接口的嵌套接口。

Java ProcessHandle.Info 接口签名

修饰符和类型方法描述
Optional<String[]>arguments()它返回进程的参数的字符串数组。
Optional<String>command()它返回进程的可执行文件路径名。
Optional<String>commandLine()它返回进程的命令行。
Optional<Instant>startInstant()它返回进程的启动时间。
Optional<Duration>totalCpuDuration()它返回进程的累积总 CPU 时间。
Optional<String>user()它返回进程的用户。

Java 9 进程 API 示例

输出

Process Id: 9111
Direct children: java.util.stream.ReferencePipeline$2@6adca536
Class name: class java.lang.ProcessHandleImpl
All processes: java.util.stream.IntPipeline$1@28f67ac7
Process info: [user: Optional[javatpoint], 
cmd: /usr/lib/jvm/java-9-oracle/bin/java, args: [-Dfile.encoding=UTF-8, 
-classpath, /home/javatpoint/irfan/java 9/java 9 programms/Java9Features/bin, 
ProcessApiExample], startTime: Optional[2017-11-18T06:30:57.940Z], totalTime: Optional[PT0.25S]]
Is process alive: true
Process's parent: Optional[7509]