Интерфейс ProcessHandle
- Все суперинтерфейсы:
Comparable<ProcessHandle>
public interface ProcessHandle extends Comparable<ProcessHandle>
ProcessHandle идентифицирует и предоставляет управление нативными процессами. Каждый отдельный процесс можно отслеживать на предмет активности, перечислять его дочерние процессы, получать информацию о процессе или уничтожить его. В сравнении, экземпляры Process были запущены текущим процессом и дополнительно предоставляют доступ к потокам ввода, вывода и ошибок процесса.
Идентификатор нативного процесса — это номер, присваиваемый процессу операционной системой. Диапазон значений идентификатора процесса зависит от операционной системы. Например, встроенная система может использовать 16-битовое значение. Информация о состоянии процесса извлекается из нативной системы и может изменяться асинхронно; процессы могут создаваться или завершаться спонтанно. Время между завершением процесса и повторным использованием идентификатора процесса для нового процесса непредсказуемо. Может существовать проблема гонки при проверке состояния процесса и выполнении действий. При использовании ProcessHandles не делайте предположений об активности или идентичности основного процесса.
Каждый ProcessHandle идентифицирует и позволяет управлять процессом в нативной системе. ProcessHandles возвращаются из методов-фабрик current(), of(long), children(), descendants(), parent() и allProcesses().
Экземпляры Process, созданные с помощью ProcessBuilder, можно запросить для получения ProcessHandle, который предоставляет информацию о процессе. Ссылки на ProcessHandle не должны свободно распространяться.
CompletableFuture, доступный из onExit(), можно использовать для ожидания завершения процесса и, возможно, запуска зависимых действий.
Методы-фабрики ограничивают доступ к ProcessHandles, используя SecurityManager для проверки RuntimePermission("manageProcess"). Возможность управления процессами также ограничена нативной системой; ProcessHandle не предоставляет больше доступа или контроля над нативным процессом, чем разрешено нативным приложением.
- Требования к реализации:
- В случае, если ProcessHandles не поддерживаются, методы-фабрики должны последовательно выбрасывать
UnsupportedOperationException. Методы этого класса выбрасываютUnsupportedOperationException, если операционная система не разрешает запрос или завершение процесса.Статические методы-фабрики
ProcessHandleвозвращают экземпляры, которые являются базовыми значениями, неизменяемыми и потокобезопасными. Использование операций, чувствительных к идентификатору (включая равенство ссылок (==), хэш-код по идентификатору или синхронизация) для этих экземпляровProcessHandleможет привести к непредсказуемым результатам и следует избегать. Используйте методыequalsилиcompareToдля сравнения ProcessHandles. - С:
- 9
- См. также:
Process
Вложенные классы
| Модификатор и тип | Интерфейс | Описание |
|---|---|---|
static interface | ProcessHandle.Info | Снимок информации о процессе. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
static Stream<ProcessHandle> | allProcesses() | Возвращает снимок всех процессов, видимых текущему процессу. |
Stream<ProcessHandle> | children() | Возвращает снимок прямых дочерних процессов. |
int | compareTo(ProcessHandle other) | Сравнивает этот ProcessHandle с указанным ProcessHandle для определения порядка. |
static ProcessHandle | current() | Возвращает ProcessHandle для текущего процесса. |
Stream<ProcessHandle> | descendants() | Возвращает снимок потомков процесса. |
boolean | destroy() | Запрашивает завершение процесса. |
boolean | destroyForcibly() | Запрашивает принудительное завершение процесса. |
boolean | equals(Object other) | Возвращает |
int | hashCode() | Возвращает значение хэш-кода для этого ProcessHandle. |
ProcessHandle.Info | info() | Возвращает снимок информации о процессе. |
boolean | isAlive() | Проверяет, жив ли процесс, представленный этим |
static Optional<ProcessHandle> | of(long pid) | Возвращает |
CompletableFuture<ProcessHandle> | onExit() | Возвращает |
Optional<ProcessHandle> | parent() | Возвращает |
long | pid() | Возвращает нативный идентификатор процесса. |
boolean | supportsNormalTermination() | Возвращает |
Методы
pid
long pid()
Возвращает идентификатор процесса (PID) процесса. Идентификатор процесса — это число, присваиваемое операционной системой процессу. Операционная система может повторно использовать идентификатор процесса после завершения работы процесса. Для сравнения ProcessHandle используйте equals или compareTo.
- Возвращает:
- идентификатор процесса (PID) процесса
- Исключение:
-
UnsupportedOperationException- если реализация не поддерживает эту операцию
of
static Optional<ProcessHandle> of(long pid)
Возвращает Optional<ProcessHandle> для существующего процесса.
- Параметры:
-
pid- идентификатор процесса (PID) - Возвращает:
- объект
Optional<ProcessHandle>для PID процесса; объектOptionalпуст, если процесс не существует - Исключение:
-
SecurityException- если установлен менеджер безопасности, и он отклоняет RuntimePermission("manageProcess") -
UnsupportedOperationException- если реализация не поддерживает эту операцию
current
static ProcessHandle current()
Возвращает ProcessHandle для текущего процесса. ProcessHandle нельзя использовать для уничтожения текущего процесса, используйте System.exit вместо этого.
- Возвращает:
- ProcessHandle для текущего процесса
- Исключение:
-
SecurityException- если установлен менеджер безопасности, и он отклоняет RuntimePermission("manageProcess") -
UnsupportedOperationException- если реализация не поддерживает эту операцию
parent
Optional<ProcessHandle> parent()
Возвращает Optional<ProcessHandle> для родительского процесса. Обратите внимание, что процессы в состоянии «зомби» обычно не имеют родителя.
- Возвращает:
- объект
Optional<ProcessHandle>родительского процесса; объектOptionalпуст, если у дочернего процесса нет родителя или родитель недоступен, возможно, из-за ограничений операционной системы - Исключение:
-
SecurityException- если установлен менеджер безопасности, и он отклоняет RuntimePermission("manageProcess")
children
Stream<ProcessHandle> children()
Возвращает снимок текущих непосредственных дочерних процессов. parent() непосредственного дочернего процесса — это процесс. Обычно у процесса, который not alive, нет дочерних процессов.
Обратите внимание, что процессы создаются и завершаются асинхронно. Нет гарантии, что процесс alive.
- Возвращает:
- последовательный поток ProcessHandle для процессов, являющихся непосредственными дочерними процессами
- Исключение:
-
SecurityException- если установлен менеджер безопасности, и он отклоняет RuntimePermission("manageProcess")
descendants
Stream<ProcessHandle> descendants()
Возвращает снимок потомков процесса. Потомки процесса — это дочерние процессы, плюс потомки этих дочерних процессов рекурсивно. Обычно у процесса, который not alive, нет дочерних процессов.
Обратите внимание, что процессы создаются и завершаются асинхронно. Нет гарантии, что процесс alive.
- Возвращает:
- последовательный поток ProcessHandles для процессов, являющихся потомками процесса
- Исключение:
-
SecurityException- если установлен менеджер безопасности, и он отклоняет RuntimePermission("manageProcess")
allProcesses
static Stream<ProcessHandle> allProcesses()
Возвращает снимок всех процессов, видимых текущему процессу.
Обратите внимание, что процессы создаются и завершаются асинхронно. Нет гарантии, что процесс в потоке жив, или что другие процессы не были созданы с момента создания снимка.
- Возвращает:
- поток ProcessHandles для всех процессов
- Исключение:
-
SecurityException- если установлен менеджер безопасности, и он отклоняет RuntimePermission("manageProcess") -
UnsupportedOperationException- если реализация не поддерживает эту операцию
info
ProcessHandle.Info info()
Возвращает снимок информации о процессе.
Объект ProcessHandle.Info имеет методы доступа, которые возвращают информацию о процессе, если она доступна.
- Возвращает:
- снимок информации о процессе, всегда не null
onExit
CompletableFuture<ProcessHandle> onExit()
Возвращает объект CompletableFuture<ProcessHandle> для завершения процесса. CompletableFuture предоставляет возможность вызывать зависимые функции или действия, которые могут выполняться синхронно или асинхронно при завершении процесса. После завершения процесса CompletableFuture completed, независимо от кода завершения процесса. Метод onExit может вызываться несколько раз для запуска независимых действий при завершении процесса.
Вызов onExit().get() ожидает завершения процесса и возвращает ProcessHandle. Future можно использовать для проверки, done ли процесс, или для wait завершения. Cancelling CompletableFuture не влияет на процесс.
- Примечание API:
- Процесс может быть отмечен как завершенный с помощью
isAlive()до завершения ComputableFuture и вызова зависимых действий. - Возвращает:
- новый
CompletableFuture<ProcessHandle>для ProcessHandle - Исключение:
-
IllegalStateException- если процесс — текущий процесс
supportsNormalTermination
boolean supportsNormalTermination()
Возвращает true если реализация destroy() нормально завершает процесс. Возвращает false если реализация destroy принудительно и немедленно завершает процесс.
- Возвращает:
-
trueесли реализацияdestroy()нормально завершает процесс; в противном случаеdestroy()принудительно завершает процесс
destroy
boolean destroy()
Запрашивает завершение процесса. Является ли процесс, представленный этим объектом ProcessHandle, normally terminated или нет, зависит от реализации. Принудительное завершение процесса определено как немедленное завершение процесса, в то время как нормальное завершение позволяет процессу завершиться корректно. Если процесс не активен, никаких действий не предпринимается. Контроли доступа операционной системы могут предотвратить завершение процесса.
CompletableFuture из onExit() completed при завершении процесса.
Примечание: процесс может не завершиться немедленно. Например, isAlive() может возвращать true в течение короткого периода после вызова destroy().
- Возвращает:
-
trueесли запрос на завершение был успешно выполнен, в противном случаеfalse - Исключение:
-
IllegalStateException- если процесс — текущий процесс
destroyForcibly
boolean destroyForcibly()
Запрашивает принудительное завершение процесса. Процесс, представленный этим объектом ProcessHandle, завершается принудительно. Принудительное завершение процесса определено как немедленное завершение процесса, в то время как нормальное завершение позволяет процессу завершиться корректно. Если процесс не активен, никаких действий не предпринимается. Контроли доступа операционной системы могут предотвратить завершение процесса.
CompletableFuture из onExit() completed при завершении процесса.
Примечание: процесс может не завершиться немедленно. Например, isAlive() может возвращать true в течение короткого периода после вызова destroyForcibly().
- Возвращает:
-
trueесли запрос на завершение был успешно выполнен, в противном случаеfalse - Исключение:
-
IllegalStateException- если процесс — текущий процесс
isAlive
boolean isAlive()
Проверяет, жив ли процесс, представленный этим ProcessHandle. Завершение процесса зависит от реализации и операционной системы. Процесс считается активным, пока PID действителен.
- Возвращает:
-
trueесли процесс, представленный этим объектомProcessHandle, еще не завершен
hashCode
int hashCode()
Возвращает хэш-код для данного ProcessHandle. Хэш-код следует общему соглашению для Object.hashCode(). Значение является функцией значения pid() и может быть функцией дополнительной информации для уникальной идентификации процесса. Если два ProcessHandle равны в соответствии с методом equals, то вызов метода hashCode для каждого из двух объектов должен давать одинаковый целочисленный результат.
- Переопределяет:
-
hashCodeв классеObject - Возвращает:
- хэш-код для этого объекта
- См. также:
-
Object.equals(java.lang.Object),System.identityHashCode(java.lang.Object)
equals
boolean equals(Object other)
Возвращает true если объект other не null, имеет ту же реализацию и представляет тот же системный процесс; в противном случае возвращает false.
- Переопределяет:
-
equalsв классеObject - Примечание реализации:
- Реализация определяет, представляют ли ProcessHandles с одинаковым PID один и тот же системный процесс. Реализации ProcessHandle должны содержать дополнительную информацию для уникальной идентификации процесса. Например, время запуска процесса можно использовать для определения, был ли PID повторно использован. Реализация
equalsдолжна возвращатьtrueдля двух ProcessHandles с одинаковым PID, если нет информации для их различения. - Параметры:
-
other- другой объект - Возвращает:
-
trueесли объектotherне null, относится к тому же классу реализации и представляет тот же системный процесс; в противном случае возвращаетfalse - См. также:
-
Object.hashCode(),HashMap
compareTo
int compareTo(ProcessHandle other)
Сравнивает этот ProcessHandle с указанным ProcessHandle для определения порядка. Порядок не определён, но согласуется с Object.equals(java.lang.Object), который возвращает true тогда и только тогда, когда два экземпляра ProcessHandle имеют одинаковую реализацию и представляют один и тот же системный процесс. Сравнение поддерживается только для объектов одной реализации. Если попытка взаимного сравнения двух разных реализаций ProcessHandle приводит к исключению ClassCastException.
- Задано:
-
compareToв интерфейсеComparable<ProcessHandle> - Параметры:
-
other- сравниваемый ProcessHandle - Возвращает:
- отрицательное целое число, ноль или положительное целое число, если этот объект меньше, равен или больше указанного объекта соответственно.
- Исключения:
-
NullPointerException- если указанный объект null -
ClassCastException- если указанный объект не принадлежит тому же классу, что и этот объект
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/ProcessHandle.html