跳到主要内容

JEP 102:处理 API 更新

概括

改进用于控制和管理操作系统进程的 API。

动机

当前 API 的局限性常常迫使开发人员求助于本机代码。

描述

Java SE 为本机操作系统进程提供有限的支持。它提供了一个基本的 API 来设置环境并启动进程。从 Java SE 7 开始,进程流可以重定向到文件、管道,也可以继承。一旦启动,API 可用于销毁进程和/或等待进程终止。

java.lang.Process 类得到增强,可以提供进程的操作特定进程 ID、有关进程的信息,包括参数、命令、进程的启动时间、进程的累计 cpu 时间以及用户名的过程。

java.lang.ProcessHandle 类返回操作系统提供的有关每个进程的信息,包括进程 ID、参数、命令、启动时间等。 ProcessHandle 可以返回进程的父进程、直接子进程以及所有后代,通过ProcessHandles 流。

ProcessHandles 可用于销毁进程并监视进程的活动性。通过 ProcessHandle.onExit,CompletableFuture 的异步机制可用于安排进程退出时要执行的操作。

对有关进程和进程控制的信息的访问受到安全管理员权限的约束,并受到正常操作系统访问控制的限制。

测试

引入的类或方法将需要可以与实现一起开发的新单元测试。更多的功能测试也会很有用。

风险和假设

此 API 的主要风险是操作系统之间的差异,特别是 Windows。

此 API 的设计需要适应在具有不同操作系统模型的较小设备上的可能部署。它还应该考虑多个 Java 虚拟机在同一操作系统进程中运行的环境。这些考虑因素可能会导致更抽象的 API 和/或增加设计工作量。