From 2453ef75bb9db857450dfd8f177b86a6ddb2e33f Mon Sep 17 00:00:00 2001 From: mikr Date: Tue, 31 Aug 2021 17:30:10 +0200 Subject: [PATCH] JAVA-5393 Update Java 9 Process API --- .../java9/process/ProcessAPIEnhancements.java | 101 ++++++++++++++ .../ProcessAPIEnhancementsUnitTest.java | 132 ------------------ 2 files changed, 101 insertions(+), 132 deletions(-) create mode 100644 core-java-modules/core-java-os/src/main/java/com/baeldung/java9/process/ProcessAPIEnhancements.java delete mode 100644 core-java-modules/core-java-os/src/test/java/com/baeldung/java9/process/ProcessAPIEnhancementsUnitTest.java diff --git a/core-java-modules/core-java-os/src/main/java/com/baeldung/java9/process/ProcessAPIEnhancements.java b/core-java-modules/core-java-os/src/main/java/com/baeldung/java9/process/ProcessAPIEnhancements.java new file mode 100644 index 0000000000..cb3c183062 --- /dev/null +++ b/core-java-modules/core-java-os/src/main/java/com/baeldung/java9/process/ProcessAPIEnhancements.java @@ -0,0 +1,101 @@ +package com.baeldung.java9.process; + +import java.io.IOException; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.stream.Stream; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ProcessAPIEnhancements { + + static Logger log = LoggerFactory.getLogger(ProcessAPIEnhancements.class); + + public static void main(String[] args) throws IOException, InterruptedException, ExecutionException { + infoOfCurrentProcess(); + infoOfLiveProcesses(); + infoOfSpawnProcess(); + infoOfExitCallback(); + infoOfChildProcess(); + } + + private static void infoOfCurrentProcess() { + ProcessHandle processHandle = ProcessHandle.current(); + ProcessHandle.Info processInfo = processHandle.info(); + + log.info("PID: " + processHandle.pid()); + log.info("Arguments: " + processInfo.arguments()); + log.info("Command: " + processInfo.command()); + log.info("Instant: " + processInfo.startInstant()); + log.info("Total CPU duration: " + processInfo.totalCpuDuration()); + log.info("User: " + processInfo.user()); + } + + private static void infoOfSpawnProcess() throws IOException { + + String javaCmd = ProcessUtils.getJavaCmd().getAbsolutePath(); + ProcessBuilder processBuilder = new ProcessBuilder(javaCmd, "-version"); + Process process = processBuilder.inheritIO().start(); + ProcessHandle processHandle = process.toHandle(); + ProcessHandle.Info processInfo = processHandle.info(); + + log.info("PID: " + processHandle.pid()); + log.info("Arguments: " + processInfo.arguments()); + log.info("Command: " + processInfo.command()); + log.info("Instant: " + processInfo.startInstant()); + log.info("Total CPU duration: " + processInfo.totalCpuDuration()); + log.info("User: " + processInfo.user()); + } + + private static void infoOfLiveProcesses() { + Stream liveProcesses = ProcessHandle.allProcesses(); + liveProcesses.filter(ProcessHandle::isAlive) + .forEach(ph -> { + log.info("PID: " + ph.pid()); + log.info("Instance: " + ph.info().startInstant()); + log.info("User: " + ph.info().user()); + }); + } + + private static void infoOfChildProcess() throws IOException { + int childProcessCount = 5; + for (int i = 0; i < childProcessCount; i++) { + String javaCmd = ProcessUtils.getJavaCmd() + .getAbsolutePath(); + ProcessBuilder processBuilder + = new ProcessBuilder(javaCmd, "-version"); + processBuilder.inheritIO().start(); + } + + Stream children = ProcessHandle.current() + .children(); + children.filter(ProcessHandle::isAlive) + .forEach(ph -> log.info("PID: {}, Cmd: {}", ph.pid(), ph.info() + .command())); + Stream descendants = ProcessHandle.current() + .descendants(); + descendants.filter(ProcessHandle::isAlive) + .forEach(ph -> log.info("PID: {}, Cmd: {}", ph.pid(), ph.info() + .command())); + } + + private static void infoOfExitCallback() throws IOException, InterruptedException, ExecutionException { + String javaCmd = ProcessUtils.getJavaCmd() + .getAbsolutePath(); + ProcessBuilder processBuilder + = new ProcessBuilder(javaCmd, "-version"); + Process process = processBuilder.inheritIO() + .start(); + ProcessHandle processHandle = process.toHandle(); + + log.info("PID: {} has started", processHandle.pid()); + CompletableFuture onProcessExit = processHandle.onExit(); + onProcessExit.get(); + log.info("Alive: " + processHandle.isAlive()); + onProcessExit.thenAccept(ph -> { + log.info("PID: {} has stopped", ph.pid()); + }); + } + +} diff --git a/core-java-modules/core-java-os/src/test/java/com/baeldung/java9/process/ProcessAPIEnhancementsUnitTest.java b/core-java-modules/core-java-os/src/test/java/com/baeldung/java9/process/ProcessAPIEnhancementsUnitTest.java deleted file mode 100644 index c81f060150..0000000000 --- a/core-java-modules/core-java-os/src/test/java/com/baeldung/java9/process/ProcessAPIEnhancementsUnitTest.java +++ /dev/null @@ -1,132 +0,0 @@ -package com.baeldung.java9.process; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import java.io.IOException; -import java.util.concurrent.CompletableFuture; -import java.util.stream.Stream; - -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Created by sanaulla on 2/23/2017. - */ - -public class ProcessAPIEnhancementsUnitTest { - - Logger log = LoggerFactory.getLogger(ProcessAPIEnhancementsUnitTest.class); - - // @Test - // OS / Java version dependent - public void givenCurrentProcess_whenInvokeGetInfo_thenSuccess() throws IOException { - ProcessHandle processHandle = ProcessHandle.current(); - ProcessHandle.Info processInfo = processHandle.info(); - assertNotNull(processHandle.pid()); - assertEquals(true, processInfo.arguments() - .isPresent()); - assertEquals(true, processInfo.command() - .isPresent()); - assertTrue(processInfo.command() - .get() - .contains("java")); - - assertEquals(true, processInfo.startInstant() - .isPresent()); - assertEquals(true, processInfo.totalCpuDuration() - .isPresent()); - assertEquals(true, processInfo.user() - .isPresent()); - } - - // @Test - // OS / Java version dependent - public void givenSpawnProcess_whenInvokeGetInfo_thenSuccess() throws IOException { - - String javaCmd = ProcessUtils.getJavaCmd() - .getAbsolutePath(); - ProcessBuilder processBuilder = new ProcessBuilder(javaCmd, "-version"); - Process process = processBuilder.inheritIO() - .start(); - ProcessHandle processHandle = process.toHandle(); - ProcessHandle.Info processInfo = processHandle.info(); - assertNotNull(processHandle.pid()); - assertEquals(true, processInfo.arguments() - .isPresent()); - assertEquals(true, processInfo.command() - .isPresent()); - assertTrue(processInfo.command() - .get() - .contains("java")); - assertEquals(true, processInfo.startInstant() - .isPresent()); - assertEquals(false, processInfo.totalCpuDuration() - .isPresent()); - assertEquals(true, processInfo.user() - .isPresent()); - } - - // @Test - // OS / Java version dependent - public void givenLiveProcesses_whenInvokeGetInfo_thenSuccess() { - Stream liveProcesses = ProcessHandle.allProcesses(); - liveProcesses.filter(ProcessHandle::isAlive) - .forEach(ph -> { - assertNotNull(ph.pid()); - assertEquals(true, ph.info() - .startInstant() - .isPresent()); - assertEquals(true, ph.info() - .user() - .isPresent()); - }); - } - - // @Test - // OS / Java version dependent - public void givenProcess_whenGetChildProcess_thenSuccess() throws IOException { - int childProcessCount = 5; - for (int i = 0; i < childProcessCount; i++) { - String javaCmd = ProcessUtils.getJavaCmd() - .getAbsolutePath(); - ProcessBuilder processBuilder - = new ProcessBuilder(javaCmd, "-version"); - processBuilder.inheritIO().start(); - } - - Stream children = ProcessHandle.current() - .children(); - children.filter(ProcessHandle::isAlive) - .forEach(ph -> log.info("PID: {}, Cmd: {}", ph.pid(), ph.info() - .command())); - Stream descendants = ProcessHandle.current() - .descendants(); - descendants.filter(ProcessHandle::isAlive) - .forEach(ph -> log.info("PID: {}, Cmd: {}", ph.pid(), ph.info() - .command())); - } - - // @Test - // OS / Java version dependent - public void givenProcess_whenAddExitCallback_thenSuccess() throws Exception { - String javaCmd = ProcessUtils.getJavaCmd() - .getAbsolutePath(); - ProcessBuilder processBuilder - = new ProcessBuilder(javaCmd, "-version"); - Process process = processBuilder.inheritIO() - .start(); - ProcessHandle processHandle = process.toHandle(); - - log.info("PID: {} has started", processHandle.pid()); - CompletableFuture onProcessExit = processHandle.onExit(); - onProcessExit.get(); - assertEquals(false, processHandle.isAlive()); - onProcessExit.thenAccept(ph -> { - log.info("PID: {} has stopped", ph.pid()); - }); - } - -}