如何在 Java 9 中使用 JShell 列印 pid、資訊、子程序並銷燬程序?
JShell 是一個 Java Shell 工具,用於執行類似類、方法、介面、列舉等簡單的 java 語句。它會對語句進行評估,然後在命令列提示符中列印結果。
Java 改進了程序 API,以管理和控制作業系統程序。ProcessHandle 介面可識別本地程序並提供對本地程序的控制,提供用於檢查程序 存活狀態的方法,以及銷燬 程序的方法。ProcessHandle.Info 介面提供程序的快照資訊。
在下面的程式碼片段中,我們可以列印Process API.in JShell 工具中的pid、資訊、子程序和銷燬程序。
程式碼段
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)
廣告