JEP 102: Process API Updates
Обновления Process API
| Автор | Alan Bateman |
| Ответственный | Roger Riggs |
| Тип | Feature |
| Область | SE |
| Статус | Closed / Delivered |
| Выпуск | 9 |
| Компонент | core-libs / java.lang |
| Обсуждение | core dash libs dash dev at openjdk dot java dot net |
| Трудоёмкость | M |
| Длительность | M |
| Зависит от | 8077350: JEP 102 Process API Updates Implementation |
| Связан с | JEP 279: Improve Test-Failure Troubleshooting |
| Одобрен | Brian Goetz |
| Создан | 2011/09/01 20:00 |
| Обновлён | 2017/03/09 09:08 |
| Задача | 8046092 |
Аннотация
Улучшить API для управления процессами операционной системы.
Мотивация
Из-за ограничений текущего API разработчикам часто приходится прибегать к нативному коду.
Описание
Java SE поддерживает нативные процессы операционной системы лишь в ограниченной мере. Платформа предоставляет базовый API для настройки окружения и запуска процесса. Начиная с Java SE 7, потоки ввода-вывода процесса можно перенаправить в файлы или каналы либо унаследовать. После запуска процесса API позволяет завершить процесс и/или дождаться его завершения.
Класс java.lang.Process расширен: он предоставляет идентификатор процесса в операционной системе и сведения о процессе, в том числе аргументы, команду, время запуска процесса, накопленное процессорное время процесса и имя пользователя процесса.
Класс java.lang.ProcessHandle возвращает сведения о каждом процессе в том виде, в каком их предоставляет операционная система, в том числе идентификатор процесса, аргументы, команду, время запуска и т. д. ProcessHandle может вернуть родительский процесс, непосредственные дочерние процессы, а также всех потомков в виде потока (stream) объектов ProcessHandle.
С помощью ProcessHandle можно завершать процессы и отслеживать, работают ли они. Метод ProcessHandle.onExit позволяет использовать асинхронные механизмы CompletableFuture, чтобы запланировать действие, которое будет выполнено при завершении процесса.
Доступ к сведениям о процессах и управление процессами зависят от разрешений менеджера безопасности и ограничены обычными механизмами контроля доступа операционной системы.
Тестирование
Для новых классов и методов потребуются новые модульные тесты, которые можно разработать вместе с реализацией. Дополнительные функциональные тесты также были бы полезны.
Риски и допущения
Основной риск этого API связан с различиями между операционными системами, в частности с Windows.
Дизайн этого API должен допускать возможное развёртывание на небольших устройствах с другими моделями операционных систем. Он также должен учитывать окружения, в которых несколько виртуальных машин Java работают в одном процессе операционной системы. Эти соображения могут привести к более абстрактному API и/или увеличить трудоёмкость проектирования.