English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriales básicos de Java

Control de flujo de Java

Arreglos de Java

Java orientado a objetos (I)

Java orientado a objetos (II)

Java orientado a objetos (III)

Manejo de excepciones en Java

Java Lista (List)

Java Queue (cola)

Colecciones de Java Map

Conjuntos de Java

Java entrada/salida (I/O)

Reader de Java/Writer

Otras temáticas de Java

Java 9 API de proceso mejorado

Java 9 Nuevas características

En Java 9 Antes, el API de Process carecía de soporte básico para el uso de procesos locales, como obtener el PID y el propietario del proceso, la hora de inicio del proceso, cuánto tiempo utilizó el CPU el proceso, cuántos procesos locales están ejecutándose, etc.

Java 9 Se ha añadido una interfaz llamada ProcessHandle a la API de Process para mejorar la clase java.lang.Process.

Un ejemplo de la interfaz ProcessHandle identifica un proceso local, permitiendo consultar el estado del proceso y gestionarlo.

El interfaz anidado Info de ProcessHandle permite a los desarrolladores evitar la situación común de tener que usar código nativo para obtener el PID de un proceso local.

No podemos proporcionar una implementación de método en la interfaz. Si queremos proporcionar una combinación de métodos abstractos y no abstractos (métodos y su implementación), debemos usar una clase abstracta.

El método onExit() declarado en la interfaz ProcessHandle se puede utilizar para desencadenar ciertas operaciones cuando finaliza algún proceso.

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 = "No presente";
      Process p = pb.start();
      ProcessHandle.Info info = p.info();
      System.out.printf("ID de proceso: %n", p.pid());
      System.out.printf("Nombre de comando: %n", info.command().orElse(np));
      System.out.printf("Línea de comandos: %n", info.commandLine().orElse(np));
 
      System.out.printf("Inicio de tiempo: %n",
         info.startInstant().map(i -> i.atZone(ZoneId.systemDefault())
         .toLocalDateTime().toString()).orElse(np));
 
      System.out.printf("Argumentos : %s%n",
         info.arguments().map(a -> Stream.of(a).collect(
         Collectors.joining(" "))).orElse(np));
 
      System.out.printf("Usuario : %s%n", info.user().orElse(np));
   } 
}

El resultado de ejecutar el ejemplo anterior es:

ID de proceso : 5800
Nombre de comando : C:\Windows\System32\notepad.exe
Línea de comandos : No Presentes
Tiempo de inicio: 2017-11-04T21:35:03.626
Argumentos : No Presentes
Usuario: administrador

Java 9 Nuevas características