Java教程
+ -

Java Java 9 改进的进程 API

2019-09-09 2 0

Java 9 之前,Process API 仍然缺乏对使用本地进程的基本支持,例如获取进程的 PID 和所有者,进程的开始时间,进程使用了多少 CPU时间,多少本地进程正在运行等。

Java 9 向 Process API 添加了一个名为 ProcessHandle 的接口来增强 java.lang.Process 类。

ProcessHandle 接口的实例标识一个本地进程,它允许查询进程状态并管理进程。

ProcessHandle 嵌套接口 Info 来让开发者逃离时常因为要获取一个本地进程的 PID 而不得不使用本地代码的窘境。

我们不能在接口中提供方法实现。如果我们要提供抽象方法和非抽象方法(方法与实现)的组合,那么我们就得使用抽象类。

ProcessHandle 接口中声明的 onExit() 方法可用于在某个进程终止时触发某些操作。

实例

import java.time.ZoneId;
import java.util.stream.Stream;
import java.util.stream.Collectors;
import java.io.IOException;
public class Tester {
   public static void main(String[] args) throws IOException {
      ProcessBuilder pb = new ProcessBuilder("notepad.exe");
      String np = "Not Present";
      Process p = pb.start();
      ProcessHandle.Info info = p.info();
      System.out.printf("Process ID : %s%n", p.pid());
      System.out.printf("Command name : %s%n", info.command().orElse(np));
      System.out.printf("Command line : %s%n", info.commandLine().orElse(np));
      System.out.printf("Start time: %s%n",
         info.startInstant().map(i -> i.atZone(ZoneId.systemDefault())
         .toLocalDateTime().toString()).orElse(np));
      System.out.printf("Arguments : %s%n",
         info.arguments().map(a -> Stream.of(a).collect(
         Collectors.joining(" "))).orElse(np));
      System.out.printf("User : %s%n", info.user().orElse(np));
   } 
}

以上实例执行输出结果为:

Process ID : 5800
Command name : C:\Windows\System32\notepad.exe
Command line : Not Present
Start time: 2017-11-04T21:35:03.626
Arguments : Not Present
User: administrator

0 篇笔记 写笔记

Java 多线程编程
Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。这里定义和线程相关的另一个术语 -进程:一个进程包括由操作系统分配的内存空间,包含一个或多个线程。......
Java Applet 基础
Applet 是一种 Java 程序。它一般运行在支持 Java 的 Web 浏览器内。因为它有完整的 Java API支持,所以Applet是一个全功能的 Java 应用程序。如下所示是独立的 Java 应用程序和 applet 程序之间重要的不同:Java 中 Applet 类继承了 java.......
CEF 多进程线程模型
CEF多进程由于CEF是基于chromium的封装开发,其本质不提供实质的额外关于浏览器的功能开发,只是对基于chromium接口的重新封装。所以cef和chromium的多进程一致。CEF3产生的独立进程使用进程间通信(IPC)进行通信.browser和render进程可以通过来回发送异步消息进行......
Java rint() 方法
rint() 方法返回最接近参数的整数值。语法该方法有以下几种语法格式:double rint(double d)参数double 原始数据类型。返回值返回 double 类型数组,是最接近参数的整数值。实例实例public class Test{ public static void mai......
设计模式 拦截过滤器模式
拦截过滤器模式(Intercepting FilterPattern)用于对应用程序的请求或响应做一些预处理/后处理。定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上。过滤器可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。过滤器(Filte......
Java sqrt() 方法
sqrt() 方法用于返回参数的算术平方根。语法double sqrt(double d)参数d -- 任何原生数据类型。返回值返回参数的算术平方根。实例public class Test{ public static void main(String args[]){ dou......
Ajax Java示例
要创建ajax示例,需要使用服务器端语言,例如:Servlet,JSP,PHP,ASP.Net等。这里使用JSP来生成服务器端代码。在这个例子中,只是打印给定数字的表。使 用jsp创建ajax示例的步骤需要按照以下步骤操作:加载org.json.jar文件。创建输入页面以接收文本或数字。创......
设计模式 过滤器模式
过滤器模式(Filter Pattern)或标准模式(CriteriaPattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。实现我们将创建一个 Person 对象、 C......
Java 条件语句
if 语句的用语法如下:if(布尔表达式){ //如果布尔表达式为true将执行的语句}如果布尔表达式的值为 true,则执行 if 语句中的代码块,否则执行 if 语句块后面的代码。Test.java 文件代码:public class Test { public static void ......
CEF 进程间通信(IPC)
由于CEF3在多个进程中运行,因此有必要提供在这些进程之间进行通信的机制。CefBrowser和CefFrame对象存在于浏览器和渲染过程中,这有助于促进此过程。每个CefBrowser和CefFrame对象还具有与其关联的唯一ID值,该值将在进程边界的两侧匹配。处理启动消息要在启动时为所有渲染进程......
Java 运算符
计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把运算符分成以下几组:算术运算符关系运算符位运算符逻辑运算符赋值运算符其他运算符算术运算符算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。下表列出了所有的算术运算符。表格中的实......
Java subSequence() 方法
subSequence() 方法返回一个新的字符序列,它是此序列的一个子序列。语法public CharSequence subSequence(int beginIndex, int endIndex)参数beginIndex -- 起始索引(包括)。endIndex -- 结束索引(不包括)。返......
Java intern() 方法
intern() 方法返回字符串对象的规范化表示形式。它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。语法public String intern()参数无返回值一个字符串,内容与此......
Java 文档注释
Java 支持三种注释方式。前两种分别是 // 和 / / ,第三种被称作说明注释,它以 /** 开始,以 */ 结束。说明注释允许你在程序中嵌入关于程序的信息。你可以使用 javadoc 工具软件来生成信息,并输出到HTML文件中。说明注释,使你更加方便的记录你的程序信息。javadoc 标签ja......
Java Java 9 钻石操作符(Diamond Operator)
钻石操作符是在 java 7 中引入的,可以让代码更易读,但它不能用于匿名的内部类。在 java 9 中, 它可以与匿名的内部类一起使用,从而提高代码的可读性。考虑以下 Java 9 之前的代码:实例public class Tester { public static void main(St......
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!