Java 9 Process API: ключевые улучшения и новые возможности
В Java 9 Process API существенно улучшен для управления процессами ОС. Класс ProcessHandle предоставляет:
- Нативный PID процесса
- Время запуска
- Накопленное CPU-время
- Аргументы командной строки
- Команду
- Пользователя-владельца
- Родительский процесс
- Дочерние процессы (descendants)
Также: проверка живучести (isAlive()), уничтожение (destroy(), destroyForcibly()), асинхронное действие при завершении через CompletableFuture (onExit()).
Пример: информация о запущенном процессе (notepad.exe)
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("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));
}
}
Вывод (пример)
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
Новый API делает управление нативными процессами переносимым и удобным без JNI/JNA.
java
- Освоение операторов Java: типы, синтаксис и практические примеры
- Комментарии в Java: типы, использование и лучшие практики
- Освоение улучшенного цикла for в Java: синтаксис, примеры и лучшие практики
- Освоение строк в Java: создание, методы и лучшие практики
- Интерфейсы в Java: концепции, реализация и лучшие практики
- Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
- Try-with-resources в Java: автоматическое управление ресурсами
- Аннотации в Java: типы, размещение и практические примеры
- Assertions в Java: практическое руководство по обнаружению багов и обеспечению надежности кода
- Java 9 (JDK 9): ключевые возможности и преимущества