Интерфейс 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(), можно использовать для ожидания завершения процесса и, возможно, запуска зависимых действий.
Возможность управления процессами может быть ограничена нативной системой; ProcessHandle не предоставляет большего доступа к нативному процессу или контроля над ним, чем доступно нативному приложению.
- Требования к реализации:
- Если поддержка ProcessHandles невозможна, фабричные методы должны последовательно выбрасывать исключение
UnsupportedOperationException. Методы этого класса выбрасывают исключениеUnsupportedOperationException, если операционная система не разрешает получать сведения о процессе или завершать его.ProcessHandleстатические фабричные методы возвращают экземпляры, основанные на значениях, неизменяемые и безопасные для использования в многопоточной среде. Программистам следует считать взаимозаменяемыми экземпляры, которые равны, и не использовать экземпляры для синхронизации, иначе поведение может быть непредсказуемым. Например, в будущей версии синхронизация может завершиться неудачей. Для сравнения ProcessHandles используйте методыequalsилиcompareTo. - С:
- 9
- См. также:
Краткое описание вложенных классов
| Модификатор и тип | Интерфейс | Описание |
|---|---|---|
static interface |
ProcessHandle.Info |
Снимок сведений о процессе. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static Stream |
allProcesses() |
Возвращает снимок всех процессов, видимых текущему процессу. |
Stream |
children() |
Возвращает снимок текущих непосредственных дочерних процессов данного процесса. |
int |
compareTo |
Сравнивает этот ProcessHandle с указанным ProcessHandle для определения порядка. |
static ProcessHandle |
current() |
Возвращает ProcessHandle текущего процесса. |
Stream |
descendants() |
Возвращает снимок потомков процесса. |
boolean |
destroy() |
Запрашивает завершение процесса. |
boolean |
destroyForcibly() |
Запрашивает принудительное завершение процесса. |
boolean |
equals |
Возвращает true, если объект other не равен null, относится к той же реализации и представляет тот же системный процесс; в противном случае возвращает false. |
int |
hashCode() |
Возвращает хеш-код этого ProcessHandle. |
ProcessHandle.Info |
info() |
Возвращает снимок сведений о процессе. |
boolean |
isAlive() |
Проверяет, работает ли процесс, представленный этим ProcessHandle. |
static Optional |
of |
Возвращает Optional<ProcessHandle> для существующего нативного процесса. |
CompletableFuture |
onExit() |
Возвращает CompletableFuture<ProcessHandle> для завершения процесса. |
Optional |
parent() |
Возвращает Optional<ProcessHandle> для родительского процесса. |
long |
pid() |
Возвращает идентификатор нативного процесса. |
boolean |
supportsNormalTermination() |
Возвращает true, если реализация метода destroy() выполняет обычное завершение процесса. |
Подробное описание методов
pid
long pid()
equals или compareTo.- Возвращает:
- идентификатор нативного процесса
- Выбрасывает:
-
UnsupportedOperationException— если реализация не поддерживает эту операцию
of
static Optional<ProcessHandle> of(long pid)
Optional<ProcessHandle> для существующего нативного процесса.- Параметры:
-
pid— идентификатор нативного процесса - Возвращает:
Optional<ProcessHandle>PID процесса;Optionalпуст, если процесс не существует- Выбрасывает:
-
UnsupportedOperationException— если реализация не поддерживает эту операцию
current
static ProcessHandle current()
System.exit.- Возвращает:
- ProcessHandle текущего процесса
- Выбрасывает:
-
UnsupportedOperationException— если реализация не поддерживает эту операцию
parent
Optional<ProcessHandle> parent()
Optional<ProcessHandle> родительского процесса. Обратите внимание, что у процессов в состоянии зомби обычно нет родителя.- Возвращает:
Optional<ProcessHandle>родительского процесса;Optionalпуст, если у дочернего процесса нет родителя или родитель недоступен, возможно, из-за ограничений операционной системы
children
Stream<ProcessHandle> children()
parent() непосредственного дочернего процесса является этот процесс. Как правило, у процесса, который not alive, нет дочерних процессов. Обратите внимание, что процессы создаются и завершаются асинхронно. Нет гарантии, что процесс alive.
- Возвращает:
- последовательный Stream объектов ProcessHandle для процессов, являющихся непосредственными дочерними процессами данного процесса
descendants
Stream<ProcessHandle> descendants()
not alive, нет дочерних процессов. Обратите внимание, что процессы создаются и завершаются асинхронно. Нет гарантии, что процесс alive.
- Возвращает:
- последовательный Stream объектов ProcessHandle для процессов, являющихся потомками данного процесса
allProcesses
static Stream<ProcessHandle> allProcesses()
Обратите внимание, что процессы создаются и завершаются асинхронно. Нет гарантии, что процесс в потоке всё ещё работает или что после создания снимка не были созданы другие процессы.
- Возвращает:
- Stream объектов ProcessHandle для всех процессов
- Выбрасывает:
-
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()до завершенияCompletableFutureи вызова зависимых действий. - Возвращает:
- новый
CompletableFuture<ProcessHandle>для ProcessHandle - Выбрасывает:
-
IllegalStateException— если процесс является текущим
supportsNormalTermination
boolean supportsNormalTermination()
true, если реализация destroy() выполняет обычное завершение процесса. Возвращает false, если реализация 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()
Object.hashCode(). Оно зависит от значения pid() и может зависеть от дополнительных сведений, позволяющих однозначно идентифицировать процесс. Если согласно методу equals два ProcessHandle равны, то вызов метода hashCode для каждого из этих объектов должен возвращать одно и то же целое число.equals
boolean equals(Object other)
true, если объект other не равен null, относится к той же реализации и представляет тот же системный процесс; в противном случае возвращает false.- Переопределяет:
-
equalsв классеObject - Примечание к реализации:
- Зависит от реализации, представляют ли ProcessHandles с одинаковым PID один и тот же системный процесс. Реализации ProcessHandle должны содержать дополнительные сведения, позволяющие однозначно идентифицировать процесс. Например, для определения того, был ли PID использован повторно, можно использовать время запуска процесса. Реализация
equalsдолжна возвращатьtrueдля двух ProcessHandles с одинаковым PID, если только нет сведений, позволяющих различить их. - Параметры:
-
other— другой объект - Возвращает:
-
true, если объектotherне равен null, относится к тому же классу реализации и представляет тот же системный процесс; в противном случае возвращаетfalse - См. также:
compareTo
int compareTo(ProcessHandle other)
Object.equals(Object), который возвращает true тогда и только тогда, когда оба экземпляра ProcessHandle относятся к одной реализации и представляют один и тот же системный процесс. Сравнение поддерживается только для объектов одной реализации. При попытке сравнить между собой две разные реализации ProcessHandle выбрасывается исключение ClassCastException.- Определено в:
-
compareToв интерфейсеComparable<ProcessHandle> - Параметры:
-
other— ProcessHandle для сравнения - Возвращает:
- отрицательное целое число, ноль или положительное целое число, если этот объект меньше, равен или больше указанного объекта соответственно.
- Выбрасывает:
-
NullPointerException— если указанный объект равен null -
ClassCastException— если указанный объект относится не к тому же классу, что и этот объект
© 1993, 2025, 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/25/docs/api/java.base/java/lang/ProcessHandle.html