欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

Java 9:Process API的增强

发布时间:2023/12/3 java 59 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Java 9:Process API的增强 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Java 9对Process API进行了各种改进,用于控制和管理操作系统进程。

获取有关流程的信息

有一个新的ProcessHandle类,提供了进程的pid,父级和后代,以及有关开始时间和累积CPU时间的信息。

jshell> Process p = new ProcessBuilder("stress", "--cpu", "4", "--timeout", "5").start(); p ==> Process[pid=5572, exitValue="not exited"]jshell> p.pid() $2 ==> 5572jshell> p.info().user() $3 ==> Optional[fahd]jshell> p.info().command() $4 ==> Optional[/usr/bin/stress]jshell> p.info().commandLine() $5 ==> Optional[/usr/bin/stress --cpu 4 --timeout 120]jshell> Arrays.toString(p.info().arguments().get()) $6 ==> "[--cpu, 4, --timeout, 120]"jshell> p.info().startInstant() $7 ==> Optional[2018-02-25T16:38:56.742Z]jshell> p.info().totalCpuDuration().get().toMillis() $8 ==> 0

奇怪的是,无论我运行什么命令, totalCpuDuration始终返回0(持续时间字符串为“ PT0S”)。

请注意,在上面的示例中,我正在调用Linux stress命令。 这是在系统上施加某种压力(例如,创建cpu负载)的有用工具。

列出所有正在运行的进程

静态ProcessHandle.allProcesses()方法返回对当前进程可见的所有进程的流。

ProcessHandle.allProcesses().map(ProcessHandle::info).map(ProcessHandle.Info::commandLine).flatMap(Optional::stream).forEach(System.out::println)

进程退出时触发功能

当进程终止时,可以使用Process.onExit方法调度功能。 此方法返回CompletableFuture ,其中包含可以调用以调度函数的各种方法。 这是一个例子:

Process proc = new ProcessBuilder("sleep", "10").start(); proc.onExit().thenAccept(p -> System.out.println("Process " + p.pid() + " exited with " + p.exitValue()));

另外,要等待进程终止,可以调用Process.onExit().get() 。

翻译自: https://www.javacodegeeks.com/2018/02/java-9-enhancements-process-api.html

总结

以上是生活随笔为你收集整理的Java 9:Process API的增强的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。