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