我正在调用一个生成两个进程的命令
Process p = Runtime.getRuntime().exec("<...>\bin\\script");
“进程 1 的 pid 为 1234,进程 2 的 ppid 为 1234,pid 3456”
我可以通过以下代码获取进程ID(1234):
String name = ManagementFactory.getRuntimeMXBean().getName();
String processId = name.split("@")[0];
System.out.println("Process ID for this app = " + processId);
但是我无法获取其他进程的ID(3456)。有没有办法从进程中提取所有子进程 ID?
从 java 9 开始,您可以从 ProcessHandle 类获取所有子进程和后代进程。 示例:
ProcessHandle.current().children(); // give a stream on all child processes of your current process
ProcessHandle.current().descendants(); // give a stream on all child processes of your current process and recursively their own child processes
您可以使用 allProcesses() 并过滤它或 of(pid),而不是 current(),来查找任何其他进程的子进程。