进程处理类和相关API已在Java 9中引入。我们可以使用ProcessHandle接口和相关方法来获取pid以及其他相关进程的信息。我们需要获取进程的所有子进程,然后使用 java.lang.ProcessHandle.children() 方法。此方法返回一个流,通常是没有子进程的进程。
在下面的示例中,我们可以获取第一个进程并检索其子进程信息。
import java.util.stream.Stream; import java.util.Optional; public class ChilderenProcessTest { public static void main(String args[]) throws InterruptedException { System.out.println("---------------------------"); System.out.println("Children Processes:"); Optional<ProcessHandle> processHandle = ProcessHandle.allProcesses().findFirst(); processHandle.ifPresent(proc -> proc.children().forEach(child -> System.out.println("PID: [ " + child.pid() + " ], Cmd: [ " + child.info().command() + " ]"))); } }
--------------------------- Children Processes: PID: [ 0 ], Cmd: [ Optional.empty ] PID: [ 4 ], Cmd: [ Optional.empty ] PID: [ 424 ], Cmd: [ Optional.empty ] PID: [ 504 ], Cmd: [ Optional.empty ] PID: [ 560 ], Cmd: [ Optional.empty ] PID: [ 444 ], Cmd: [ Optional.empty ] PID: [ 1236 ], Cmd: [ Optional.empty ] PID: [ 1288 ], Cmd: [ Optional.empty ] PID: [ 1408 ], Cmd: [ Optional.empty ] PID: [ 1424 ], Cmd: [ Optional.empty ] PID: [ 1452 ], Cmd: [ Optional.empty ] PID: [ 1468 ], Cmd: [ Optional.empty ] PID: [ 5412 ], Cmd: [ Optional[C:WINDOWSSystem32taskhostex.exe] ] PID: [ 3760 ], Cmd: [ Optional[C:Program FilesSynapticsSynTPSynTPEnh.exe] ] PID: [ 5216 ], Cmd: [ Optional[C:WINDOWSexplorer.exe] ] PID: [ 2460 ], Cmd: [ Optional[C:Program Files (x86)Dell WirelessBluetooth SuiteBtvStack.exe] ] PID: [ 6064 ], Cmd: [ Optional[C:Program FilesRealtekAudioHDARtkNGUI64.exe] ] PID: [ 7172 ], Cmd: [ Optional[C:Program Files (x86)GoogleChromeApplicationchrome.exe] ] PID: [ 860 ], Cmd: [ Optional[C:Program Files (x86)GoogleChromeApplicationchrome.exe] ] PID: [ 9000 ], Cmd: [ Optional.empty ] PID: [ 4180 ], Cmd: [ Optional[C:WINDOWSSystem32cmd.exe] ] PID: [ 3748 ], Cmd: [ Optional[C:WINDOWSSystem32conhost.exe] ] PID: [ 3376 ], Cmd: [ Optional.empty ] PID: [ 2548 ], Cmd: [ Optional.empty ] PID: [ 1820 ], Cmd: [ Optional[C:Program FilesJavajdk-9.0.4binjava.exe] ]