English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
No Java 9 Antes, o Process API ainda faltava suporte básico para o uso de processos locais, como obter o PID e o proprietário do processo, o tempo de início do processo, quanto tempo de CPU o processo usou, quantos processos locais estão em execução, etc.
Java 9 Foi adicionada uma interface chamada ProcessHandle ao Process API para fortalecer a classe java.lang.Process.
Um exemplo da interface ProcessHandle identifica um processo local, permitindo consultar o estado do processo e gerenciar o processo.
A interface Info aninhada em ProcessHandle permite que os desenvolvedores evitem a situação comum de precisar usar código nativo para obter o PID de um processo local.
Não podemos fornecer uma implementação de método dentro da interface. Se precisarmos fornecer uma combinação de métodos abstratos e não abstratos (métodos com implementação), precisamos usar uma classe abstrata.
O método onExit() declarado na interface ProcessHandle pode ser usado para acionar algumas operações quando um 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 = "Not Present"; Process p = pb.start(); ProcessHandle.Info info = p.info(); System.out.printf("Process ID : %s%n", p.pid()); System.out.printf("Command name : %s%n", info.command().orElse(np)); System.out.printf("Command line : %s%n", info.commandLine().orElse(np)); System.out.printf("Start time: %s%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("Usuário: %s%n", info.user().orElse(np)); } }
O resultado de execução do exemplo acima é:
ID do Processo : 5800 Nome do Comando : C:\Windows\System32\notepad.exe Linha de Comando : Não Presentes Tempo de Início: 2017-11-04T21:35:03.626 Argumentos : Não Presentes Usuário: administrador