个性化阅读
专注于IT技术分析

Java 9 Process API改进

本文概述

Java改进了Java 9版本的流程API, 该API有助于管理和控制操作系统流程。

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

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

修饰符和类型 方法 描述
boolean supportsNormalTermination() 如果destroy()的实现通常是终止进程, 则返回true, 否则返回false。
ProcessHandle toHandle() 它为流程返回一个ProcessHandle。
long pid() 它返回流程的本机流程ID。
Stream<ProcessHandle> children() 它返回该过程的直接子代的快照。
Stream<ProcessHandle> descendants() 它返回进程后代的快照。
ProcessHandle.Info info() 它返回有关该过程的信息的快照。
CompletableFuture<Process> onExit() 它返回CompletableFuture <Process>以终止该进程。

添加了新的接口ProcessHandle和ProcessHandle.Info。


Java ProcessHandle接口

ProcessHandle帮助处理和控制过程。我们可以监控流程, 列出其子级, 获取信息等。

该接口包含静态工厂方法, 这些方法返回基于值, 不可变且线程安全的实例。

Java ProcessHandle接口签名

public interface ProcessHandle extends Comparable<ProcessHandle>

此接口包含以下方法。

修饰符和类型 方法 描述
静态Stream <ProcessHandle> allProcesses() 它返回当前进程可见的所有进程的快照。
Stream<ProcessHandle> children() 它返回该进程当前直接子级的快照。
int compareTo(ProcessHandle other) 它将比较此ProcessHandle与指定的ProcessHandle的顺序。
静态ProcessHandle current() 它为当前进程返回一个ProcessHandle。
Stream<ProcessHandle> descendants() 它返回进程后代的快照。
boolean destroy() 它要求终止该进程。
boolean destroyForcibly() 它要求将进程强行杀死。
boolean equals(Object 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() 如果destroy()的实现通常终止进程, 则返回true。

Java ProcessHandle.Info接口

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

Java ProcessHandle.Info接口签名

public static interface ProcessHandle.Info
修饰符和类型 方法 描述
Optional<String[]> arguments() 它返回该过程的参数的字符串数组。
Optional<String> command() 它返回进程的可执行路径名。
Optional<String> commandLine() 它返回进程的命令行。
Optional<Instant> startInstant() 它返回过程的开始时间。
Optional<Duration> totalCpuDuration() 它返回该进程累计的总cputime。
Optional<String> user() 它返回该过程的用户。

Java 9 Process API示例

public class ProcessApiExample {
	public static void main(String[] args) {
		ProcessHandle currentProcess = ProcessHandle.current(); 	// Current processhandle
		System.out.println("Process Id: "+currentProcess.pid()); 	// Process id 
		System.out.println("Direct children: "+ currentProcess.children()); // Direct children of the process
		System.out.println("Class name: "+currentProcess.getClass()); 		// Class name
		System.out.println("All processes: "+ProcessHandle.allProcesses()); // All current processes 
		System.out.println("Process info: "+currentProcess.info()); 		// Process info
		System.out.println("Is process alive: "+currentProcess.isAlive()); 
		System.out.println("Process's parent "+currentProcess.parent());  // Parent of the process
	}
}

输出:

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[srcmini], cmd: /usr/lib/jvm/java-9-oracle/bin/java, args: [-Dfile.encoding=UTF-8, -classpath, /home/srcmini/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]
赞(0)
未经允许不得转载:srcmini » Java 9 Process API改进

评论 抢沙发

评论前必须登录!