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

Tutoriais Básicos de Java

Controle de fluxo Java

Array Java

Java Orientação a Objetos (I)

Java Orientação a Objetos (II)

Java Orientação a Objetos (III)

Tratamento de Exceções Java

Java Lista (List)

Java Fila (Queue)

Mapa Java

Conjunto Java

Java Entrada e Saída (I/O)/O)

Reader do Java/Writer

Outros tópicos do Java

Java 9 API de processo melhorada

Java 9 Novas Características

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

Java 9 Novas Características