Java 9流程API改进
Java在Java 9版本中改进了其流程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>
此接口包含以下方法。
修饰符和类型 |
方法 |
说明 |
static stream <ProcessHandle> |
allProcesses() |
它返回当前进程可见的所有进程的快照。 |
Stream <ProcessHandle> |
children() |
它返回该进程当前直接子级的快照。 |
int |
compareTo(ProcessHandle other) |
它将此ProcessHandle与指定的ProcessHandle进行比较以获取订单。 |
static ProcessHandle |
current() |
它为当前进程返回一个ProcessHandle。 |
Stream <ProcessHandle> |
descendants() |
它返回进程后代的快照。 |
boolean |
destroy() |
它要求终止该进程。 |
boolean |
destroyForcfully() |
它要求将进程强行杀死。 |
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() |
它为父进程返回一个可选的<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[lidihuo],
cmd: /usr/lib/jvm/java-9-oracle/bin/java, args: [-Dfile.encoding=UTF-8,
-classpath, /home/lidihuo/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]