Skip to content

Commit dbaf36a

Browse files
author
mikr
committed
JAVA-5393 Update Java 9 Process API
1 parent 7bc5920 commit dbaf36a

File tree

2 files changed

+101
-132
lines changed

2 files changed

+101
-132
lines changed
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package com.baeldung.java9.process;
2+
3+
import java.io.IOException;
4+
import java.util.concurrent.CompletableFuture;
5+
import java.util.concurrent.ExecutionException;
6+
import java.util.stream.Stream;
7+
8+
import org.slf4j.Logger;
9+
import org.slf4j.LoggerFactory;
10+
11+
public class ProcessAPIEnhancements {
12+
13+
static Logger log = LoggerFactory.getLogger(ProcessAPIEnhancements.class);
14+
15+
public static void main(String[] args) throws IOException, InterruptedException, ExecutionException {
16+
infoOfCurrentProcess();
17+
infoOfLiveProcesses();
18+
infoOfSpawnProcess();
19+
infoOfExitCallback();
20+
infoOfChildProcess();
21+
}
22+
23+
private static void infoOfCurrentProcess() {
24+
ProcessHandle processHandle = ProcessHandle.current();
25+
ProcessHandle.Info processInfo = processHandle.info();
26+
27+
log.info("PID: " + processHandle.pid());
28+
log.info("Arguments: " + processInfo.arguments());
29+
log.info("Command: " + processInfo.command());
30+
log.info("Instant: " + processInfo.startInstant());
31+
log.info("Total CPU duration: " + processInfo.totalCpuDuration());
32+
log.info("User: " + processInfo.user());
33+
}
34+
35+
private static void infoOfSpawnProcess() throws IOException {
36+
37+
String javaCmd = ProcessUtils.getJavaCmd().getAbsolutePath();
38+
ProcessBuilder processBuilder = new ProcessBuilder(javaCmd, "-version");
39+
Process process = processBuilder.inheritIO().start();
40+
ProcessHandle processHandle = process.toHandle();
41+
ProcessHandle.Info processInfo = processHandle.info();
42+
43+
log.info("PID: " + processHandle.pid());
44+
log.info("Arguments: " + processInfo.arguments());
45+
log.info("Command: " + processInfo.command());
46+
log.info("Instant: " + processInfo.startInstant());
47+
log.info("Total CPU duration: " + processInfo.totalCpuDuration());
48+
log.info("User: " + processInfo.user());
49+
}
50+
51+
private static void infoOfLiveProcesses() {
52+
Stream<ProcessHandle> liveProcesses = ProcessHandle.allProcesses();
53+
liveProcesses.filter(ProcessHandle::isAlive)
54+
.forEach(ph -> {
55+
log.info("PID: " + ph.pid());
56+
log.info("Instance: " + ph.info().startInstant());
57+
log.info("User: " + ph.info().user());
58+
});
59+
}
60+
61+
private static void infoOfChildProcess() throws IOException {
62+
int childProcessCount = 5;
63+
for (int i = 0; i < childProcessCount; i++) {
64+
String javaCmd = ProcessUtils.getJavaCmd()
65+
.getAbsolutePath();
66+
ProcessBuilder processBuilder
67+
= new ProcessBuilder(javaCmd, "-version");
68+
processBuilder.inheritIO().start();
69+
}
70+
71+
Stream<ProcessHandle> children = ProcessHandle.current()
72+
.children();
73+
children.filter(ProcessHandle::isAlive)
74+
.forEach(ph -> log.info("PID: {}, Cmd: {}", ph.pid(), ph.info()
75+
.command()));
76+
Stream<ProcessHandle> descendants = ProcessHandle.current()
77+
.descendants();
78+
descendants.filter(ProcessHandle::isAlive)
79+
.forEach(ph -> log.info("PID: {}, Cmd: {}", ph.pid(), ph.info()
80+
.command()));
81+
}
82+
83+
private static void infoOfExitCallback() throws IOException, InterruptedException, ExecutionException {
84+
String javaCmd = ProcessUtils.getJavaCmd()
85+
.getAbsolutePath();
86+
ProcessBuilder processBuilder
87+
= new ProcessBuilder(javaCmd, "-version");
88+
Process process = processBuilder.inheritIO()
89+
.start();
90+
ProcessHandle processHandle = process.toHandle();
91+
92+
log.info("PID: {} has started", processHandle.pid());
93+
CompletableFuture<ProcessHandle> onProcessExit = processHandle.onExit();
94+
onProcessExit.get();
95+
log.info("Alive: " + processHandle.isAlive());
96+
onProcessExit.thenAccept(ph -> {
97+
log.info("PID: {} has stopped", ph.pid());
98+
});
99+
}
100+
101+
}

core-java-modules/core-java-os/src/test/java/com/baeldung/java9/process/ProcessAPIEnhancementsUnitTest.java

Lines changed: 0 additions & 132 deletions
This file was deleted.

0 commit comments

Comments
 (0)