English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Prima di Java 9, l'API Process mancava di supporto fondamentale per l'uso dei processi locali, come ottenere il PID e il proprietario del processo, l'ora di inizio del processo, la quantità di tempo CPU utilizzato dal processo, quante processi locali sono in esecuzione, ecc.
Java 9 ha aggiunto un'interfaccia chiamata ProcessHandle all'API Process per migliorare la classe java.lang.Process.
Un esempio dell'interfaccia ProcessHandle identifica un processo locale, che consente di interrogare lo stato del processo e gestirlo.
L'interfaccia ProcessHandle nesteda fornisce un modo per i sviluppatori di evitare l'uso di codice locale per ottenere il PID di un processo locale.
Non possiamo fornire l'implementazione dei metodi nell'interfaccia. Se dobbiamo fornire una combinazione di metodi astratti e non astratti (metodi e implementazione), allora dobbiamo utilizzare una classe astratta.
Il metodo onExit() dichiarato nell'interfaccia ProcessHandle può essere utilizzato per innescare alcune operazioni quando un processo termina.
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 presente"; Process p = pb.start(); ProcessHandle.Info info = p.info(); System.out.printf("ID processo: \n", p.pid()); System.out.printf("Nome comando: \n", info.command().orElse(np)); System.out.printf("Linea di comando: \n", info.commandLine().orElse(np)); System.out.printf("Tempo di inizio: \n",) info.startInstant().map(i -> i.atZone(ZoneId.systemDefault())) .toLocalDateTime().toString()).orElse(np));}} System.out.printf("Argomenti : %s%n", info.arguments().map(a -> Stream.of(a).collect( Collectors.joining(" "))).orElse(np)); System.out.printf("Utente : %s%n", info.user().orElse(np)); } }
Il risultato di esecuzione dell'esempio sopra è:
ID processo : 5800 Nome comando : C:\Windows\System32\notepad.exe Riga di comando : Non Presenti Ora di inizio: 2017-11-04T21:35:03.626 Argomenti : Non Presenti Utente: amministratore