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的增强相关推荐

  1. Java 9:Process API的增强

    Java 9对Process API进行了各种改进,用于控制和管理操作系统进程. 获取有关流程的信息 有一个新的ProcessHandle类,提供了进程的pid,父级和后代,以及有关开始时间和累积CP ...

  2. Java 9:流API的增强

    Java 9向Stream接口添加了4种新方法: 1. dropWhile dropWhile方法类似于skip方法,但使用Predicate而不是固定的整数值. 当Predicate为true时,它 ...

  3. atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97

    atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97 1. 实现html5化界面的要解决的策略1 1.1. Js交互1 1.2. 动态参 ...

  4. java swing调用H5_atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97...

    atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97 1.实现html5化界面的要解决的策略 1.1.Js交互 Firefox与Chro ...

  5. 在JShell中尝试Java9 HTTP客户端和Process API

    这篇文章继续了My My Java 9 Features博客文章中对Java9功能的探索. 在这里,我们用在Java9 HTTP / 2客户端和进程API试验JShell HTTP / 2客户端 HT ...

  6. Java接口的防御性API演进

    API的发展绝对是不平凡的. 只有少数几个需要处理的事情. 我们大多数人每天都在使用内部专有API. 现代IDE附带了很棒的工具,可以分解,重命名,上拉,下推,间接,委托,推断,泛化我们的代码伪像. ...

  7. Java调用高德地图API根据详细地址获取经纬度

    Java调用高德地图API根据详细地址获取经纬度 官方API:https://lbs.amap.com/api/webservice/guide/api/georegeo * Web服务API 地理/ ...

  8. process_在JShell中尝试Java9 HTTP客户端和Process API

    process 这篇文章继续了My My Java 9 Features博客文章中对Java9功能的探索. 在这里,我们用在Java9 HTTP / 2客户端和进程API试验JShell HTTP / ...

  9. 【错误记录】Android 中调用 Process 命令行执行指令 ( java.lang.IllegalThreadStateException: process hasn‘t exited )

    文章目录 一.报错信息 二.解决方案 一.报错信息 2021-05-07 13:24:24.672 29512-29512/kim.hsl.a7_zip E/AndroidRuntime: FATAL ...

最新文章

  1. 度学习实践:如何使用Tensorflow实现快速风格迁移?
  2. 二分查找的实现---java版本
  3. 英特尔cpu发布时间表_英特尔10nm芯片开始大规模出货,先进制程时间表浮出水面...
  4. imclearboder matlab,Lucas
  5. 1042 mysql57_一次处理DB2宕机的实战经历(SQL1042C )
  6. ssh 免密登录并用脚本群起服务
  7. java struct 简单案列_spring与struts简单整合案例
  8. [转]Visual Studio 2010 MSDN 文件位置及安装注意事项
  9. Matlab 中文版下载,安装图文教程
  10. 判断最小生成树的唯一性
  11. 程序设计c语言高速公路收费标准,高速公路收费系统c语言课程设计报告分解.docx...
  12. linux程序设计学习心得,几点学习Linux编程的建议
  13. 免费思维导图软件分享
  14. WIN10系统如何取消右下角的通知菜单,通知图标
  15. Excel PivotTable 使用心得手顺分享(一)
  16. 编程帮助小明计算地铁票价(C++)
  17. 计算机云计算论文范文,云计算环境下计算机管理系统论文
  18. VSCode升级后启动不了~
  19. 水安ABC考试多选练习题库(6)
  20. 基于VB中WINSOCK控件的网上象棋系统的实现

热门文章

  1. 面试-线程池的成长之路
  2. 又发生频繁FGC,这次是谁的锅
  3. 设计数据库表时,你真的会选数据类型吗
  4. 8条关于Web前端性能的优化建议
  5. Mybatis入门程序增删改查操作
  6. Feign数据压缩传输
  7. 2020蓝桥杯省赛---java---A---7(回文日期)
  8. 一次性加载树结构数据表 mapper加载
  9. java正则表达式验证密码_最新密码验证正则表达式
  10. php如何求同列元素之和_求得这个数组中各个元素之和