API Process améliorée de Java 9

Java 9 新特性Nouveautés de Java 9

Avant Java 9, l'API Process manquait encore d'une prise en charge de base pour l'utilisation de processus natifs, comme l'obtention du PID et du propriétaire d'un processus, l'heure de début du processus, la quantité de temps CPU utilisée par le processus, le nombre de processus natifs en cours d'exécution, etc.

Java 9 a ajouté une interface nommée ProcessHandle à l'API Process pour améliorer la classe java.lang.Process.

Une instance de l'interface ProcessHandle identifie un processus natif, permettant d'interroger l'état du processus et de gérer le processus.

L'interface imbriquée Info de ProcessHandle aide les développeurs à échapper au dilemme de devoir utiliser du code natif pour obtenir le PID d'un processus local.

Nous ne pouvons pas fournir d'implémentations de méthodes dans les interfaces. Si nous voulons fournir une combinaison de méthodes abstraites et non abstraites (méthodes avec implémentations), nous devons alors utiliser des classes abstraites.

La méthode onExit() déclarée dans l'interface ProcessHandle peut être utilisée pour déclencher certaines actions lorsqu'un processus se termine.

Exemple

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 = "Non présent"; Process p = pb.start(); ProcessHandle.Info info = p.info(); System.out.printf("ID du processus : %s%n", p.pid()); System.out.printf("Nom de la 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("Utilisateur : %s%n", info.user().orElse(np)); } }

La sortie de l'exemple ci-dessus est :

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 新特性Nouveautés de Java 9

Autres extensions