进程 API 改进
原文:https://www.studytonight.com/java-9/process-api-improvement
Java 在 Java 9 版本中通过在 process 类中添加新的方法以及 ProcessHandle 和 ProcessHandle.Info 这两个新接口,对其 process API 进行了改进
它有助于控制和管理流程,无论是基于操作系统的流程还是应用流程。我们可以创建流程,获取有关流程的信息,如流程 id、所有者姓名、等待时间、流程状态等。
进程 API 中的两个新接口:
- java.lang.ProcessHandle
- java.lang.ProcessHandle.Info
Java 中的 Process 类提供了几种方法来处理流程并执行操作,如检查等待流程完成、检查流程的退出状态以及销毁(杀死)流程等。
以下是在 Java 9 版本中添加到 Process 类的一些方法。
Java 进程类方法(仅限 Java 9 方法)
| 方法 | 描述 |
| 布尔支持 sNormalTermination() | 如果 destroy()的实现是正常终止进程,则返回 true,否则返回 false。 |
| ProcessHandle toHandle() | 它为进程返回一个进程句柄。 |
| 长 pid() | 它返回进程的本机进程标识。 |
| 流
示例:查找流程标识
让我们通过一个简单的例子来理解流程处理。这里,我们使用 process 类的 pid()方法获取进程 id。
public class Main {
public static void main(String[] args){
ProcessHandle currentProcess = ProcessHandle.current();
System.out.println("Process Id: "+currentProcess.pid());
}
}
流程编号:16458
Java 进程句柄接口
Java 添加了这个接口来识别和控制本地进程。获取子进程列表、进程信息或销毁进程等都是很有帮助的。下面给出了该方法的语法。
public interface ProcessHandle extends Comparable<ProcessHandle>
接口方法
以下是进程句柄接口的方法。它包含一个名为“信息”的嵌套接口。
| 方法 | 描述 |
| 静态流
| 比较(其他进程句柄) | |
| 它将此进程句柄与订单的指定进程句柄进行比较。 |
| 静态进程句柄电流() | 它返回当前进程的进程句柄。 |
| 流
在前面的例子中,我们获取了当前正在运行的进程的进程 id。然而,我们可以自己开始一个新的进程并处理它。
示例:在 Linux 中启动虚拟仪器编辑器
现在,让我们使用 ProcessBuilder 类的 start()方法创建一个新的进程。这里,我们在 Linux 中启动 vim 编辑器的一个进程,并使用 pid()方法获取进程 id。
public class Main {
public static void main(String[] args) throws IOException{
Process p = new ProcessBuilder("vim").start();
System.out.println(p.pid());
}
}
13834
示例:进程信息
这个例子解释了我们如何获得一个进程的信息。我们使用了进程类的 pid()、isAlive()、info()、hashCode()等方法。
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException{
Process p = new ProcessBuilder("vim").start();
// Get process ID
System.out.println(p.pid());
// Check is Alive?
System.out.println(p.isAlive());
// Get process Info
System.out.println(p.info());
// Get Hahscode
System.out.println(p.hashCode());
// Get child process
System.out.println(p.children());
// Get className
System.out.println(p.getClass());
}
}
14413 true 【用户:可选【root】,cmd: /usr/bin/vim.basic,startTime:可选【2020-07-23T19:02:42.310Z】,totalTime:可选【PT0S】】 1418481495 Java . util . stream . referencepipeline $ 2 @ 65ab 7765 class Java . lang . processimpl
Java ProcessHandle。信息界面
该界面提供了有关该进程的信息快照。它是 ProcessHandle 接口的嵌套接口。每个操作系统的进程属性并不相似,并且在所有实现中都不可用。有关进程的信息受到发出请求的进程的操作系统权限的限制。这个接口的签名如下。
public static interface ProcessHandle.Info
ProcessHandle。信息方法
下面是 ProcessHandle.info 接口的方法,它是一个静态的嵌套接口
| 方法 | 描述 |
| 可选
示例:
这里,我们使用的是 ProcessHandle。获取进程信息的接口方法。
import java.io.IOException;
import java.time.Duration;
public class Main {
public static void main(String[] args) throws IOException{
ProcessHandle.Info info = ProcessHandle.current().info();
System.out.println(info.arguments());
System.out.println(info.command().orElse("Not Found"));
String[] argz = info.arguments().orElse(new String[] {});
for (String arg: argz)
System.out.printf(" %s%n", arg);
System.out.println("Owner: "+info.user());
System.out.println("RunTime: "+info.totalCpuDuration().orElse(Duration.ofMillis(0)).toMillis());
}
}
可选[[ljava . lang . string;@ 1f 32 e 575] /usr/lib/JVM/Java-11-openjdk-amd64/bin/Java -dfile . encoding = UTF-8 -类路径 /home/root/eclipse/myjavaproject/bin:/home/root/Downloads/mongo-Java-driver-3 . 12 . 4 . jar:/home/root/Downloads/opencsv-3 . 8 . jar:/home/root/Downloads/commons-logging-1.2/commons 主 所有者:可选【根】 运行时间:100