Интерфейс ProcessHandle
- Все суперинтерфейсы:
Comparable<ProcessHandle>
public interface ProcessHandle extends Comparable<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возвращают экземпляры, которые являются базирующимися на значении, неизменяемыми и потокобезопасными. Программисты должны рассматривать экземпляры, которые являются равными, как взаимозаменяемые и не должны использовать экземпляры для синхронизации, так как это может привести к непредсказуемому поведению. Например, в будущих версиях синхронизация может завершиться сбоем. Используйте методequalsилиcompareToдля сравнения ProcessHandles. - С:
- 9
- См. также:
Краткое описание вложенных классов
| Модификатор и тип | Интерфейс | Описание |
|---|---|---|
static interface |
ProcessHandle.Info |
Снимок информации о процессе. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static Stream<ProcessHandle> |
allProcesses() |
Возвращает снимок всех процессов, видимых текущим процессом. |
Stream<ProcessHandle> |
children() |
Возвращает снимок всех непосредственных дочерних процессов. |
int |
compareTo |
Сравнивает этот ProcessHandle с указанным ProcessHandle для упорядочения. |
static ProcessHandle |
current() |
Возвращает ProcessHandle для текущего процесса. |
Stream<ProcessHandle> |
descendants() |
Возвращает снимок потомков процесса. |
boolean |
destroy() |
Запрашивает завершение процесса. |
boolean |
destroyForcibly() |
Запрашивает принудительное завершение процесса. |
boolean |
equals |
Возвращает true, если объект other не null, имеет ту же реализацию и представляет тот же системный процесс; в противном случае возвращает false. |
int |
hashCode() |
Возвращает значение хэш-кода для этого ProcessHandle. |
ProcessHandle.Info |
info() |
Возвращает снимок информации о процессе. |
boolean |
isAlive() |
Проверяет, жив ли процесс, представленный этим ProcessHandle. |
static Optional<ProcessHandle> |
of |
Возвращает ProcessHandle для существующего нативного процесса. |
CompletableFuture<ProcessHandle> |
onExit() |
Возвращает Future для завершения процесса. |
Optional<ProcessHandle> |
parent() |
Возвращает ProcessHandle для родительского процесса. |
long |
pid() |
Возвращает идентификатор нативного процесса. |
boolean |
supportsNormalTermination() |
Возвращает true, если реализация destroy() обычно завершает процесс. |
Подробное описание методов
pid
long pid()
equals или compareTo.- Возвращает:
- идентификатор процесса (native process ID)
- Исключение:
-
UnsupportedOperationException- если реализация не поддерживает эту операцию
of
static Optional<ProcessHandle> of(long pid)
- Параметры:
-
pid- идентификатор процесса (native process ID) - Возвращает:
- ProcessHandle, соответствующий указанному идентификатору процесса; ProcessHandle пустой, если процесса с указанным идентификатором не существует
- Исключение:
-
SecurityException- если установлен менеджер безопасности и он запрещает RuntimePermission("manageProcess") -
UnsupportedOperationException- если реализация не поддерживает эту операцию
current
static ProcessHandle current()
System.exit вместо этого.- Возвращает:
- ProcessHandle для текущего процесса
- Исключение:
-
SecurityException- если установлен менеджер безопасности и он запрещает RuntimePermission("manageProcess") -
UnsupportedOperationException- если реализация не поддерживает эту операцию
parent
Optional<ProcessHandle> parent()
- Возвращает:
- ProcessHandle родительского процесса; ProcessHandle пустой, если у дочернего процесса нет родителя или родитель недоступен, возможно, из-за ограничений операционной системы
- Исключение:
-
SecurityException- если установлен менеджер безопасности и он запрещает RuntimePermission("manageProcess")
children
Stream<ProcessHandle> children()
parent() прямого дочернего процесса — это сам процесс. Как правило, у работающего процесса нет дочерних процессов. Обратите внимание, что процессы создаются и завершаются асинхронно. Нет гарантии, что процесс будет alive.
- Возвращает:
- последовательный поток ProcessHandles для прямых дочерних процессов
- Исключение:
-
SecurityException- если установлен менеджер безопасности и он запрещает RuntimePermission("manageProcess")
descendants
Stream<ProcessHandle> descendants()
Обратите внимание, что процессы создаются и завершаются асинхронно. Нет гарантии, что процесс будет 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()
completed, независимо от кода завершения процесса. Метод onExit может вызываться несколько раз для вызова независимых действий при завершении процесса. Вызов onExit().get() ожидает завершения процесса и возвращает ProcessHandle. Future можно использовать для проверки, является ли процесс done, или для ожидания его завершения. Cancelling CompleteableFuture не влияет на процесс.
- Примечание API:
- Процесс может быть отмечен как завершившийся с помощью
isAlive()до завершения ComputableFuture и вызова зависимых действий. - Возвращает:
- новое CompletableFuture для ProcessHandle
- Исключение:
-
IllegalStateException- если процесс — текущий процесс
supportsNormalTermination
boolean supportsNormalTermination()
true если реализация метода destroy() нормально завершает процесс. Возвращает false если реализация метода destroy принудительно и немедленно завершает процесс.- Возвращает:
-
trueесли реализация методаdestroy()нормально завершает процесс; в противном случае,destroy()принудительно завершает процесс
destroy
boolean destroy()
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()
Object.hashCode(). Значение является функцией значения pid() и может зависеть от дополнительной информации для уникальной идентификации процесса. Если два объекта ProcessHandle равны в соответствии с методом equals, то вызов метода hashCode для каждого из этих двух объектов должен возвращать одинаковое целое значение.- Overrides:
-
hashCodeв классеObject - Возвращает:
- значение хэш-кода для данного объекта
- См. также:
equals
boolean equals(Object other)
true если переданный объект не равен null, имеет тот же класс реализации и представляет тот же системный процесс; в противном случае возвращает false.- Overrides:
-
equalsв классеObject - Примечание реализации:
- Зависит от реализации, означают ли ProcessHandle с одинаковым PID один и тот же системный процесс. Реализации ProcessHandle должны содержать дополнительную информацию для уникальной идентификации процесса. Например, время запуска процесса может использоваться для определения, был ли PID повторно использован. Реализация
equalsдолжна возвращатьtrueдля двух ProcessHandle с одинаковым PID, если нет информации для их различения. - Параметры:
-
other- другой объект - Возвращает:
-
trueесли переданный объект не равен null, является объектом того же класса реализации и представляет тот же системный процесс; в противном случае возвращаетfalse - См. также:
compareTo
int compareTo(ProcessHandle other)
Object.equals(java.lang.Object), который возвращает true тогда и только тогда, когда два экземпляра ProcessHandle имеют одинаковую реализацию и представляют один и тот же системный процесс. Сравнение поддерживается только среди объектов одной реализации. Если выполняется попытка взаимного сравнения двух разных реализаций ProcessHandle, будет брошено исключение ClassCastException.- Specified by:
-
compareToв интерфейсеComparable<ProcessHandle> - Параметры:
-
other- ProcessHandle для сравнения - Возвращает:
- отрицательное целое число, ноль или положительное целое число, если этот объект меньше, равен или больше, чем указанный объект.
- Использует:
-
NullPointerException- если переданный объект равен null -
ClassCastException- если переданный объект не того же класса, что и этот объект
© 1993, 2021, 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/17/docs/api/java.base/java/lang/ProcessHandle.html