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

Tutoriel de base Java

Contrôle de flux Java

Java tableau

Java orienté objet (I)

Java orienté objet (II)

Java orienté objet (III)

Gestion des exceptions Java

Java Liste (List)

Java Queue (file d'attente)

Java Map collectif

Java Set collectif

Java entrée/sortie (I/O)

Java Reader/Writer

Autres sujets Java

Java 9 API de processus améliorée

Java 9 New features

En Java 9 Avant, l'API Process manquait le soutien de base pour l'utilisation des processus locaux, par exemple, obtenir le PID et le propriétaire du processus, le temps de début du processus, combien de temps le processus a utilisé le CPU, combien de processus locaux sont en cours d'exécution, etc.

Java 9 Une interface ProcessHandle a été ajoutée à l'API Process pour renforcer la classe java.lang.Process.

Un exemple de l'interface ProcessHandle identifie un processus local, ce qui permet de consulter l'état du processus et de gérer le processus.

L'interface imbriquée Info de ProcessHandle permet aux développeurs de s'éviter la situation courante où il faut utiliser du code local pour obtenir le PID d'un processus local.

Nous ne pouvons pas fournir une implémentation de méthode dans une interface. Si nous devons fournir une combinaison de méthodes abstraites et non abstraites (méthodes et implémentations), alors nous devons utiliser une classe abstraite.

La méthode onExit() déclarée dans l'interface ProcessHandle peut être utilisée pour déclencher certaines opérations lors de la terminaison d'un processus.

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("ID de processus: %s%n", p.pid());
      System.out.printf("Nom de commande: %s%n", info.command().orElse(np));
      System.out.printf("Ligne de commande: %s%n", info.commandLine().orElse(np));
 
      System.out.printf("Heure de début: %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));
   } 
}

The output results of the above examples are as follows:

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

Java 9 New features