English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
До Java 9 API процесса все еще не поддерживал основные функции использования локальных процессов, такие как получение PID процесса и его владельца, время начала процесса, количество используемого CPU времени, количество запущенных локальных процессов и т.д.
Java 9 добавил интерфейс ProcessHandle в Process API для улучшения java.lang.Process класса.
Пример интерфейса ProcessHandle идентифицирует локальный процесс, позволяя запрашивать состояние процесса и управлять им.
Интерфейс Info, вложенный в ProcessHandle, позволяет разработчикам избежать ситуации, когда им приходится использовать локальный код для получения PID локального процесса.
Мы не можем предоставить реализацию метода в интерфейсе. Если мы хотим предоставить абстрактный метод и неабстрактный метод (метод и его реализацию), то нам нужно использовать абстрактный класс.
Метод onExit() из интерфейса ProcessHandle может быть использован для выполнения某些 операций при завершении процесса.
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 = "Не существует"; Process p = pb.start(); ProcessHandle.Info info = p.info(); System.out.printf("ID процесса: %s%n", p.pid()); System.out.printf("Имя команды: %s%n", info.command().orElse(np)); System.out.printf("Командная строка: %s%n", info.commandLine().orElse(np)); System.out.printf("Время старта: %s%n", info.startInstant().map(i -> i.atZone(ZoneId.systemDefault())) .toLocalDateTime().toString()).orElse(np));}} System.out.printf("Аргументы : %s%n", info.arguments().map(a -> Stream.of(a).collect( Collectors.joining(" "))).orElse(np)); System.out.printf("Пользователь : %s%n", info.user().orElse(np)); } }
Результат выполнения примера выше:
ID процесса : 5800 Имя команды : C:\Windows\System32\notepad.exe Командная строка : Отсутствуют Время старта: 2017-11-04T21:35:03.626 Аргументы : Отсутствуют Пользователь: администратор