亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

Java 9 进程 API 改进:ProcessHandle 与异步控制

核心改进

Java 9 大幅增强 java.lang.ProcessHandle,提供进程原生信息查询与控制能力,无需 JNI 或解析 ps 命令输出。

ProcessHandle 关键能力

代码示例

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.toHandle().info();

        System.out.printf("Process ID : %d%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));

        // 异步等待退出
        p.onExit().thenAccept(ph -> 
            System.out.println("Process exited with PID: " + ph.pid()));
    }
}

输出示例

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

进阶:列出所有 Java 进程

ProcessHandle.allProcesses()
    .filter(ph -> ph.info().command().orElse("").contains("java"))
    .forEach(ph -> System.out.printf("PID: %d, CMD: %s%n", 
        ph.pid(), ph.info().commandLine().orElse("")));

对比优势

场景Java 8 及之前Java 9+
获取当前进程 PIDJNI/解析 ManagementFactory 名称ProcessHandle.current().pid()
获取子进程树外部命令解析ph.children() / ph.descendants()
异步等待进程结束轮询 waitFor() 阻塞线程ph.onExit().thenAccept(...)
跨平台统一 API无全平台一致

java

  1. 精通 Java 运算符:类型、语法与实战示例
  2. Java 注释:类型、用法与最佳实践
  3. 精通 Java 增强 for 循环:语法、示例与最佳实践
  4. 精通 Java 字符串:创建、方法与最佳实践
  5. 精通 Java 接口:概念、实现与最佳实践
  6. 精通 Java 匿名内部类:定义、语法与实战示例
  7. 精通 Java Try-With-Resources:自动资源管理详解
  8. Java 注解详解:类型、放置位置与实战示例
  9. Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
  10. Java 9 (JDK 9) 核心特性与优势全览
  11. Java 9 进程 API 改进:ProcessHandle 与异步控制
  12. Java 9 Stream API 增强:takeWhile、dropWhile、iterate 与 ofNullable