openjdk.ruOpenJDK на русском

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 и/или увеличить трудоёмкость проектирования.