JEP 102: Process API Updates | 进程 API 更新
摘要
改进控制和管理操作系统进程的 API。
动机
当前 API 的限制经常迫使开发人员使用本机代码。
描述
Java SE 对本机操作系统进程提供了有限的支持。它提供了一个基本的 API 来设置环境并启动进程。自 Java SE 7 以来,进程流可以重定向到文件、管道,或者可以继承。一旦启动,API 可以用于销毁进程和/或等待进程终止。
java.lang.Process
类被增强以提供进程的操作系统特定进程 ID,包括进程的参数、命令、启动时间、累积 CPU 时间和进程的用户名等信息。
java.lang.ProcessHandle
类返回由操作系统提供的关于每个进程的信息,包括进程 ID、参数、命令、启动时间等。ProcessHandle
可以返回进程的父进程和直接子进程,并通过 ProcessHandle
流返回所有后代进程。
ProcessHandle
可以用于销毁进程和监视进程的活动状态。使用 ProcessHandle.onExit
,可以利用 CompletableFuture
的异步机制,在进程退出时安排要执行的操作。
对进程信息的访问和进程控制受安全管理器权限的限制,并受常规操作系统访问控制的限制。
测试
引入的类或方法将需要新的单元测试,可以随着实现一起开发。更多的功能测试也会很有用。
风险和假设
此 API 的主要风险是操作系统之间的差异,特别是 Windows。
此 API 的设计需要适应可能部署在具有不同操作系统模型的较小设备上。它还应考虑在同一操作系统进程中运行多个 Java 虚拟机的环境。这些考虑因素可能导致更抽象的 API 和/或增加设计工作量。