JDK9新特性-改进进程管理 API教程
Java 9 这个版本对进程管理方面的改进也是相当大的。在为数不多的几次 Java 项目中,有偶尔用到多线程,但对多进程和进程方面的了解还真是太少。 我想,大部分人应该跟我一样,在编程之外知道有进程的东西的存在,在 Java 中反而会忽视,因为多线程和并发 ( Concurrency ) 的存在感更强吧。 这次 Java 9 对进程管理的改进主要是提供了 ProcessHandle 类
ProcessHandle 类
该类在 java.lang 包中,且处于 java.base 模块中。 ProcessHandle 可以用于获取进程信息,监听和检查进程的状态,并且可以监听进程的退出 主要提供了以下几个方法 staticallProcesses() 返回当前进程可见的所有进程的快照 staticcurrent() 返回当前进程的ProcessHandle实例 staticof(longpid) 返回现有本机进程的Optional
范例
我们写一个范例来演示下 ProcessHandle 如何使用,在当前工作区创建一个文件 ProcessHandleTester.java,并输入以下内容 [Java] 纯文本查看 复制代码 ?01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 import
java.time.ZoneId;
` import` `java.util.stream.Stream;
import` `java.util.stream.Collectors;
import` `java.io.IOException;` `
public
class
ProcessHandleTester {
public
static
void
main(String[] args) throws` `IOException {` `
// Windows 有效
ProcessBuilder pb = new` `ProcessBuilder(
"notepad.exe");
String np =
"Not Present";
Process p = pb.start();
ProcessHandle.Info info = p.info();
System.out.printf(
"Process ID : %s%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));
}
}运行该范例,输出结果如下 \[Java\] 纯文本查看 复制代码 [?](http://bbs.itheima.com/#)1 2 3 4 5 6 7
[[url=mailto:yufei@www
.twle.cn]yufei@www
.twle.cn[/url] java9]$ javac ProcessHandleTester.java && java ProcessHandleTester
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`