Java 9: ​​mejoras de la API de procesos

En Java 9 Process API, que se encarga de controlar y gestionar los procesos del sistema operativo, se ha mejorado considerablemente. ProcessHandle Class ahora proporciona el ID de proceso nativo del proceso, la hora de inicio, el tiempo de CPU acumulado, los argumentos, el comando, el usuario, el proceso principal y los descendientes. La clase ProcessHandle también proporciona un método para comprobar la actividad de los procesos y destruirlos. Tiene un método de salida, la clase CompletableFuture puede realizar acciones de forma asincrónica cuando el proceso sale.

Tester.java

import java.time.ZoneId;
import java.util.stream.Stream;
import java.util.stream.Collectors;
import java.io.IOException;

public class Tester {
   public static void main(String[] args) throws IOException {
      ProcessBuilder pb = new ProcessBuilder("notepad.exe");
      String np = "Not Present";
      Process p = pb.start();
      ProcessHandle.Info info = p.info();
      System.out.printf("Process ID : %s%n", p.pid());
      System.out.printf("Command name : %s%n", info.command().orElse(np));
      System.out.printf("Command line : %s%n", info.commandLine().orElse(np));

      System.out.printf("Start time: %s%n",
         info.startInstant().map(i -> i.atZone(ZoneId.systemDefault())
         .toLocalDateTime().toString()).orElse(np));

      System.out.printf("Arguments : %s%n",
         info.arguments().map(a -> Stream.of(a).collect(
         Collectors.joining(" "))).orElse(np));

      System.out.printf("User : %s%n", info.user().orElse(np));
   } 
}

Salida

Verá el siguiente resultado.

Process ID : 5800
Command name : C:\Windows\System32\notepad.exe
Command line : Not Present
Start time: 2017-11-04T21:35:03.626
Arguments : Not Present
User: administrator