如何在 Java 9 中的 JShell 中打印 pid、info、children 和销毁进程?
javaobject oriented programmingprogramming更新于 2025/11/18 21:32:17
JShell 是一个 Java Shell 工具,用于执行简单的 Java 语句,如类、方法、接口、枚举等。对其进行评估,并在命令行提示符中打印结果。
Java 改进了 Process API 来管理和控制操作系统进程。ProcessHandle 接口识别并提供对本机进程的控制、检查进程活跃度的方法以及销毁进程。 ProcessHandle.Info 接口提供了进程的信息快照。
在下面的代码片段中,我们可以在 JShell 工具中打印 Process API 的 pid、info、children、 和 destroy 进程。
代码片段
jshell> ProcessHandle currentProcess = ProcessHandle.current();
currentProcess ==> 3960
jshell> System.out.println("Current Process Id: = " + currentProcess.pid());
Current Process Id: = 3960
jshell> currentProcess.info();
$3 ==> [user: Optional[Tutorialspoint\User], cmd: C:\Program Files\Java\jdk-9.0.4\bin\java.exe, startTime: Optional[2020-05-03T06:43:37.510Z], totalTime: Optional[PT1.265625S]]
jshell> currentProcess.pid();
$4 ==> 3960
jshell> ProcessHandle.of(3960)
$5 ==> Optional[3960]
jshell> $5.get()
$6 ==> 3960
jshell> $6.info()
$7 ==> [user: Optional[Tutorialspoint\User], cmd: C:\Program Files\Java\jdk-9.0.4\bin\java.exe, startTime: Optional[2020-05-03T06:43:37.510Z], totalTime: Optional[PT1.390625S]]
jshell> Stream<ProcessHandle> childProc = ProcessHandle.current().children();
childProc ==> java.util.stream.ReferencePipeline$2@6895a785
jshell> childProc.count()
$10 ==> 1
jshell> childProc.forEach(procHandle -> { System.out.println(procHandle.destroy() ? "Could not kill process " + procHandle.pid() : "Terminated " + procHandle.pid()); });
| java.lang.IllegalStateException thrown: stream has already been operated upon or closed
| at AbstractPipeline.evaluate (AbstractPipeline.java:229)
| at ReferencePipeline.forEach (ReferencePipeline.java:430)
| at (#11:1)
相关文章
有用资源
java 参考教程 - 该教程包含有关 java 的更多信息:https://www.cainiaomax.com/java/

