Spec-Zone.ru › OpenJDK 25

Класс Process

java.lang.Object
java.lang.Process
public abstract class Process extends Object
Process обеспечивает управление нативными процессами, запущенными с помощью ProcessBuilder.start и Runtime.exec. Класс предоставляет методы для ввода данных из процесса, вывода данных в процесс, ожидания завершения процесса, проверки кода завершения процесса и уничтожения (принудительного завершения) процесса. Методы ProcessBuilder.start() и Runtime.exec создают нативный процесс и возвращают экземпляр подкласса Process, который можно использовать для управления процессом и получения информации о нем.

Методы создания процессов могут некорректно работать со специальными процессами на некоторых нативных платформах, например с нативными оконными процессами, процессами-демонами, процессами Win16/DOS в Microsoft Windows или сценариями оболочки.

По умолчанию у созданного процесса нет собственного терминала или консоли. Все его стандартные операции ввода-вывода (то есть stdin, stdout, stderr) перенаправляются в родительский процесс, где к ним можно получить доступ через потоки, возвращаемые методами getOutputStream(), getInputStream() и getErrorStream(). Потоки символов и строк можно использовать для записи и чтения с помощью методов outputWriter(), outputWriter(Charset), inputReader(), inputReader(Charset), errorReader() и errorReader(Charset). Родительский процесс использует эти потоки для передачи входных данных процессу и получения от него выходных данных. Поскольку некоторые нативные платформы предоставляют для стандартных потоков ввода и вывода только буферы ограниченного размера, несвоевременная запись во входной поток или чтение из выходного потока процесса может привести к его блокировке или даже взаимной блокировке.

При необходимости ввод-вывод процесса также можно перенаправить с помощью методов класса ProcessBuilder.

Не требуется, чтобы процесс, представленный объектом Process, выполнялся асинхронно или параллельно относительно Java-процесса, которому принадлежит объект Process.

Начиная с версии 1.5, для создания Process рекомендуется использовать ProcessBuilder.start().

Подклассам Process следует переопределить методы onExit() и toHandle(), чтобы обеспечить полную функциональность Process, включая идентификатор процесса, информацию о процессе, непосредственных потомков и непосредственных потомков и их потомков. Как правило, проще и эффективнее всего делегировать вызовы базовому Process или ProcessHandle.

Использование ресурсов

Запуск процесса использует ресурсы как вызывающего, так и вызванного процесса, а также ресурсы потоков связи между ними. Ресурсы, необходимые для управления процессом и обмена данными между процессами, сохраняются до тех пор, пока существуют ссылки на Process, входные, ошибочные и выходные потоки или средства чтения, либо пока эти потоки и средства чтения не будут закрыты.

Процесс не завершается, когда на объект Process больше не остается ссылок, а продолжает выполняться асинхронно. Реализация процесса закрывает файловые дескрипторы и дескрипторы потоков, на которые больше нет ссылок, чтобы не допустить утечки ресурсов операционной системы. За завершившимися или принудительно завершенными процессами ведется наблюдение, после чего их ресурсы освобождаются.

Потоки следует closed, когда они больше не нужны, чтобы не задерживать освобождение ресурсов операционной системы. Для открытия и закрытия потоков можно использовать Try-with-resources.

Например, чтобы перехватить вывод программы, которая заведомо что-то выводит, а затем завершается:

List<String> capture(List<String> args) throws Exception {
    ProcessBuilder pb = new ProcessBuilder(args);
    Process process = pb.start();
    try (BufferedReader in = process.inputReader()) {
        List<String> captured = in.readAllLines();
        int status = process.waitFor();
        if (status != 0) {
            throw new RuntimeException("Process %d: %s failed with %d"
                        .formatted(process.pid(), args, status));
        }
        return captured;
    }
}

Ресурсы потока (файловый дескриптор или дескриптор) всегда используются парами: один находится в вызывающем процессе, а другой конец соединения — в вызванном процессе. Закрытие потока на любом конце прерывает связь, но не оказывает непосредственного влияния на другой процесс. Обычно закрытие потока приводит к завершению другого процесса.

Принудительное завершение процесса посылает операционной системе сигнал о необходимости завершить процесс. Очистка и освобождение ресурсов этого процесса выполняются операционной системой. Как правило, файловые дескрипторы и дескрипторы закрываются. При их закрытии все соединения с другими процессами прерываются, а файловые дескрипторы и дескрипторы в вызывающем процессе сигнализируют о конце файла или закрытии. Обычно это воспринимается как конец файла или исключение.

С версии:
1.0

Краткое описание конструкторов

Конструктор Описание
Process()
Конструктор Process по умолчанию.

Краткое описание методов

Модификатор и тип Метод Описание
Stream<ProcessHandle> children()
Возвращает снимок непосредственных потомков процесса.
Stream<ProcessHandle> descendants()
Возвращает снимок потомков процесса.
abstract void destroy()
Завершает процесс.
Process destroyForcibly()
Принудительно завершает процесс.
final BufferedReader errorReader()
Возвращает BufferedReader, связанный со стандартным потоком ошибок процесса.
final BufferedReader errorReader(Charset charset)
Возвращает BufferedReader, связанный со стандартным потоком ошибок этого процесса и использующий Charset.
abstract int exitValue()
Возвращает код завершения процесса.
abstract InputStream getErrorStream()
Возвращает входной поток, связанный с потоком ошибок процесса.
abstract InputStream getInputStream()
Возвращает входной поток, связанный с обычным выходным потоком процесса.
abstract OutputStream getOutputStream()
Возвращает выходной поток, связанный с обычным входным потоком процесса.
ProcessHandle.Info info()
Возвращает снимок информации о процессе.
final BufferedReader inputReader()
Возвращает BufferedReader, связанный со стандартным выходным потоком процесса.
final BufferedReader inputReader(Charset charset)
Возвращает BufferedReader, связанный со стандартным выходным потоком этого процесса и использующий Charset.
boolean isAlive()
Проверяет, выполняется ли процесс, представленный этим Process.
CompletableFuture<Process> onExit()
Возвращает CompletableFuture<Process> для завершения Process.
final BufferedWriter outputWriter()
Возвращает BufferedWriter, связанный с обычным входным потоком процесса и использующий нативную кодировку.
final BufferedWriter outputWriter(Charset charset)
Возвращает BufferedWriter, связанный с обычным входным потоком процесса и использующий Charset.
long pid()
Возвращает идентификатор нативного процесса.
boolean supportsNormalTermination()
Возвращает true, если реализация destroy() предназначена для обычного завершения процесса; возвращает false, если реализация destroy предназначена для принудительного и немедленного завершения процесса.
ProcessHandle toHandle()
Возвращает ProcessHandle для Process.
abstract int waitFor()
При необходимости приостанавливает текущий поток до завершения процесса, представленного этим объектом Process.
boolean waitFor(long timeout, TimeUnit unit)
При необходимости приостанавливает текущий поток до завершения процесса, представленного этим объектом Process, или до истечения указанного времени ожидания.
boolean waitFor(Duration duration)
При необходимости приостанавливает текущий поток до завершения процесса, представленного этим объектом Process, или до истечения указанной продолжительности ожидания.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание конструкторов

Process

public Process()
Конструктор Process по умолчанию.

Подробное описание методов

getOutputStream

public abstract OutputStream getOutputStream()
Возвращает выходной поток, подключенный к стандартному вводу процесса. Данные, записываемые в поток, передаются в стандартный ввод процесса, представленного этим объектом Process.

Если стандартный ввод процесса был перенаправлен с помощью ProcessBuilder.redirectInput, этот метод вернет пустой выходной поток.

Выходной поток следует закрыть, когда он больше не нужен.

Примечание API:
При записи как в getOutputStream(), так и в outputWriter() или outputWriter(Charset) перед записью в OutputStream следует вызвать BufferedWriter.flush.
Примечание по реализации:
Примечание по реализации: рекомендуется буферизовать возвращаемый выходной поток.
Возвращает:
выходной поток, подключенный к стандартному вводу процесса

getInputStream

public abstract InputStream getInputStream()
Возвращает входной поток, подключенный к стандартному выводу процесса. Поток получает данные, передаваемые из стандартного вывода процесса, представленного этим объектом Process.

Если стандартный вывод процесса был перенаправлен с помощью ProcessBuilder.redirectOutput, этот метод вернет пустой входной поток.

В противном случае, если стандартный поток ошибок процесса был перенаправлен с помощью ProcessBuilder.redirectErrorStream, входной поток, возвращаемый этим методом, будет получать объединенные стандартный вывод и поток ошибок процесса.

Входной поток следует закрыть, когда он больше не нужен.

Примечание API:
Для одного и того же Process используйте либо этот метод, либо средство чтения входных данных, но не оба сразу. Средство чтения входных данных считывает и буферизует байты из входного потока. Байты, считанные из входного потока, не будут доступны средству чтения, а содержимое буфера будет непредсказуемым.
Примечание по реализации:
Примечание по реализации: рекомендуется буферизовать возвращаемый входной поток.
Возвращает:
входной поток, подключенный к стандартному выводу процесса

getErrorStream

public abstract InputStream getErrorStream()
Возвращает входной поток, подключенный к потоку ошибок процесса. Поток получает данные, передаваемые из потока ошибок процесса, представленного этим объектом Process.

Если стандартный поток ошибок процесса был перенаправлен с помощью ProcessBuilder.redirectError или ProcessBuilder.redirectErrorStream, этот метод вернет пустой входной поток.

Поток ошибок следует закрыть, когда он больше не нужен.

Примечание API:
Для одного и того же Process используйте либо этот метод, либо средство чтения потока ошибок, но не оба сразу. Средство чтения потока ошибок считывает и буферизует байты из потока ошибок. Байты, считанные из потока ошибок, не будут доступны средству чтения, а содержимое буфера будет непредсказуемым.
Примечание по реализации:
Примечание по реализации: рекомендуется буферизовать возвращаемый входной поток.
Возвращает:
входной поток, подключенный к потоку ошибок процесса

inputReader

public final BufferedReader inputReader()
Возвращает BufferedReader, подключенный к стандартному выводу процесса. Для чтения символов, строк или строк из потока стандартного вывода используется Charset, соответствующая собственной кодировке.

Этот метод делегирует вызов методу inputReader(Charset), используя Charset, заданную системным свойством native.encoding. Если native.encoding не является допустимым именем кодировки или не поддерживается, используется Charset.defaultCharset().

Средство чтения следует закрыть, когда оно больше не нужно.

Примечание API:
Для одного и того же Process используйте либо этот метод, либо входной поток, но не оба сразу. Средство чтения входных данных считывает и буферизует байты из входного потока. Байты, считанные из входного потока, не будут доступны средству чтения, а содержимое буфера будет непредсказуемым.
Возвращает:
BufferedReader, использующий native.encoding, если она поддерживается, в противном случае — Charset.defaultCharset()
Начиная с версии:
17

inputReader

public final BufferedReader inputReader(Charset charset)
Возвращает BufferedReader, подключенный к стандартному выводу этого процесса и использующий Charset. BufferedReader можно использовать для чтения символов, строк или строк из потока стандартного вывода.

Символы считываются с помощью InputStreamReader, который считывает и декодирует байты из getInputStream() этого процесса. Байты декодируются в символы с использованием charset; некорректные последовательности входных данных и последовательности, не имеющие соответствия, заменяются символом замены, заданным по умолчанию для кодировки. BufferedReader считывает и буферизует символы из InputStreamReader.

При первом вызове этого метода создается BufferedReader; при повторном вызове с тем же charset возвращается то же BufferedReader. Повторный вызов этого метода с другим charset является ошибкой.

Если стандартный вывод процесса был перенаправлен с помощью ProcessBuilder.redirectOutput, InputStreamReader будет считывать данные из пустого входного потока.

Средство чтения следует закрыть, когда оно больше не нужно.

В противном случае, если стандартный поток ошибок процесса был перенаправлен с помощью ProcessBuilder.redirectErrorStream, средство чтения входных данных, возвращаемое этим методом, будет получать объединенные стандартный вывод и поток ошибок процесса.

Примечание API:
Для одного и того же Process используйте либо этот метод, либо входной поток, но не оба сразу. Средство чтения входных данных считывает и буферизует байты из входного потока. Байты, считанные из входного потока, не будут доступны средству чтения, а содержимое буфера будет непредсказуемым.

После завершения процесса, если стандартный ввод не был перенаправлен, чтение доступных байтов из базового потока выполняется по возможности и может быть непредсказуемым.

Параметры:
charset — Charset, используемая для декодирования байтов в символы
Возвращает:
BufferedReader для стандартного вывода процесса, использующее charset
Вызывает:
NullPointerException — если charset равно null
IllegalStateException — если метод вызывается более одного раза с разными аргументами charset
Начиная с версии:
17

errorReader

public final BufferedReader errorReader()
Возвращает BufferedReader, подключенный к стандартному потоку ошибок процесса. Для чтения символов, строк или строк из потока стандартных ошибок используется Charset, соответствующая собственной кодировке.

Этот метод делегирует вызов методу errorReader(Charset), используя Charset, заданную системным свойством native.encoding. Если native.encoding не является допустимым именем кодировки или не поддерживается, используется Charset.defaultCharset().

Средство чтения потока ошибок следует закрыть, когда оно больше не нужно.

Примечание API:
Для одного и того же Process используйте либо этот метод, либо поток ошибок, но не оба сразу. Средство чтения потока ошибок считывает и буферизует байты из потока ошибок. Байты, считанные из потока ошибок, не будут доступны средству чтения, а содержимое буфера будет непредсказуемым.
Возвращает:
BufferedReader, использующий native.encoding, если она поддерживается, в противном случае — Charset.defaultCharset()
Начиная с версии:
17

errorReader

public final BufferedReader errorReader(Charset charset)
Возвращает BufferedReader, подключенный к стандартному потоку ошибок этого процесса и использующий Charset. BufferedReader можно использовать для чтения символов, строк или строк из потока стандартных ошибок.

Символы считываются с помощью InputStreamReader, который считывает и декодирует байты из getErrorStream() этого процесса. Байты декодируются в символы с использованием charset; некорректные последовательности входных данных и последовательности, не имеющие соответствия, заменяются символом замены, заданным по умолчанию для кодировки. BufferedReader считывает и буферизует символы из InputStreamReader.

При первом вызове этого метода создается BufferedReader; при повторном вызове с тем же charset возвращается то же BufferedReader. Повторный вызов этого метода с другим charset является ошибкой.

Если стандартный поток ошибок процесса был перенаправлен с помощью ProcessBuilder.redirectError или ProcessBuilder.redirectErrorStream, InputStreamReader будет считывать данные из пустого входного потока.

Средство чтения потока ошибок следует закрыть, когда оно больше не нужно.

Примечание API:
Для одного и того же Process используйте либо этот метод, либо поток ошибок, но не оба сразу. Средство чтения потока ошибок считывает и буферизует байты из потока ошибок. Байты, считанные из потока ошибок, не будут доступны средству чтения, а содержимое буфера будет непредсказуемым.

После завершения процесса, если стандартный поток ошибок не был перенаправлен, чтение доступных байтов из базового потока выполняется по возможности и может быть непредсказуемым.

Параметры:
charset — Charset, используемая для декодирования байтов в символы
Возвращает:
BufferedReader для стандартного потока ошибок процесса, использующее charset
Вызывает:
NullPointerException — если charset равно null
IllegalStateException — если метод вызывается более одного раза с разными аргументами charset
Начиная с версии:
17

outputWriter

public final BufferedWriter outputWriter()
Возвращает BufferedWriter, подключенный к стандартному вводу процесса и использующий собственную кодировку. Записывает текст в символьный выходной поток, буферизуя символы для эффективной записи отдельных символов, массивов и строк.

Этот метод делегирует вызов методу outputWriter(Charset), используя Charset, заданную системным свойством native.encoding. Если native.encoding не является допустимым именем кодировки или не поддерживается, используется Charset.defaultCharset().

Средство записи выходных данных следует закрыть, когда оно больше не нужно.

Возвращает:
BufferedWriter для стандартного ввода процесса, использующее кодировку, заданную системным свойством native.encoding
Начиная с версии:
17

outputWriter

public final BufferedWriter outputWriter(Charset charset)
Возвращает BufferedWriter, подключенный к стандартному вводу процесса и использующий Charset. Записывает текст в символьный выходной поток, буферизуя символы для эффективной записи отдельных символов, массивов и строк.

Символы, записанные средством записи, кодируются в байты с помощью OutputStreamWriter, а Charset записываются в стандартный ввод процесса, представленного этим объектом Process. Некорректные последовательности входных данных и последовательности, не имеющие соответствия, заменяются символом замены, заданным по умолчанию для кодировки.

При первом вызове этого метода создается BufferedWriter; при повторном вызове с тем же charset возвращается то же BufferedWriter. Повторный вызов этого метода с другим charset является ошибкой.

Если стандартный ввод процесса был перенаправлен с помощью ProcessBuilder.redirectInput, OutputStreamWriter выполняет запись в пустой выходной поток.

Средство записи выходных данных следует закрыть, когда оно больше не нужно.

Примечание API:
BufferedWriter записывает символы, массивы символов и строки. Обертывание BufferedWriter в PrintWriter обеспечивает эффективную буферизацию и форматирование примитивов и объектов, а также поддержку автоматической очистки буфера при завершении строки. Вызовите метод BufferedWriter.flush(), чтобы сбросить буферизованные выходные данные в процесс.

При записи как в getOutputStream(), так и в outputWriter() или outputWriter(Charset) перед записью в OutputStream следует вызвать BufferedWriter.flush.

Параметры:
charset — Charset для кодирования символов в байты
Возвращает:
BufferedWriter для стандартного ввода процесса, использующее charset
Вызывает:
NullPointerException — если charset равно null
IllegalStateException — если метод вызывается более одного раза с разными аргументами charset
Начиная с версии:
17

waitFor

public abstract int waitFor() throws InterruptedException
При необходимости заставляет текущий поток ожидать завершения процесса, представленного этим объектом Process. Если процесс уже завершился, этот метод возвращает управление немедленно. Если процесс еще не завершился, вызывающий поток будет заблокирован до выхода процесса.
Возвращает:
код завершения процесса, представленного этим объектом Process. По соглашению, значение 0 указывает на нормальное завершение.
Вызывает:
InterruptedException — если другой поток прерывает текущий поток во время ожидания, ожидание прекращается и выбрасывается InterruptedException.

waitFor

public boolean waitFor(long timeout, TimeUnit unit) throws InterruptedException
При необходимости заставляет текущий поток ожидать завершения процесса, представленного этим объектом Process, либо истечения заданного времени ожидания.

Если процесс уже завершился, этот метод немедленно возвращает значение true. Если процесс еще не завершился, а значение времени ожидания меньше нуля или равно нулю, этот метод немедленно возвращает значение false.

Требования к реализации:
Реализация этого метода по умолчанию периодически опрашивает exitValue, чтобы проверить, завершился ли процесс.
Примечание по реализации:
Настоятельно рекомендуется переопределять этот метод в конкретных реализациях данного класса, предоставляя более эффективную реализацию.
Параметры:
timeout — максимальное время ожидания
unit — единица измерения аргумента timeout
Возвращает:
true, если процесс завершился, и false, если время ожидания истекло до завершения процесса.
Вызывает:
InterruptedException — если текущий поток прерван во время ожидания.
NullPointerException — если unit равен null
Начиная с версии:
1.8

waitFor

public boolean waitFor(Duration duration) throws InterruptedException
При необходимости заставляет текущий поток ожидать завершения процесса, представленного этим объектом Process, либо истечения заданной продолжительности ожидания.

Если процесс уже завершился, этот метод немедленно возвращает значение true. Если процесс еще не завершился, а продолжительность ожидания не является положительной, этот метод немедленно возвращает значение false.

Требования к реализации:
Реализация этого метода по умолчанию периодически опрашивает exitValue, чтобы проверить, завершился ли процесс.
Примечание по реализации:
Настоятельно рекомендуется переопределять этот метод в конкретных реализациях данного класса, предоставляя более эффективную реализацию.
Параметры:
duration — максимальная продолжительность ожидания; если она не является положительной, этот метод немедленно возвращает управление.
Возвращает:
true, если процесс завершился, и false, если продолжительность ожидания истекла до завершения процесса.
Вызывает:
InterruptedException — если текущий поток прерван во время ожидания.
NullPointerException — если duration равен null
Начиная с версии:
24

exitValue

public abstract int exitValue()
Возвращает код завершения процесса.
Возвращает:
код завершения процесса, представленного этим объектом Process. По соглашению, значение 0 указывает на нормальное завершение.
Вызывает:
IllegalThreadStateException — если процесс, представленный этим объектом Process, еще не завершился

destroy

public abstract void destroy()
Завершает процесс. То, завершится ли процесс, представленный этим объектом Process, обычным образом, зависит от реализации. Принудительное уничтожение процесса означает его немедленное завершение, тогда как обычное завершение позволяет процессу корректно завершить работу. Если процесс не активен, никаких действий не выполняется.

CompletableFuture, полученный из onExit(), завершается после завершения процесса.

destroyForcibly

public Process destroyForcibly()
Принудительно завершает процесс. Процесс, представленный этим объектом Process, завершается принудительно. Принудительное уничтожение процесса означает его немедленное завершение, тогда как обычное завершение позволяет процессу корректно завершить работу. Если процесс не активен, никаких действий не выполняется.

CompletableFuture, полученный из onExit(), завершается после завершения процесса.

Вызов этого метода для объектов Process, возвращаемых методами ProcessBuilder.start() и Runtime.exec(String), приводит к принудительному завершению процесса.

Примечание API:
Процесс может завершиться не сразу. То есть isAlive() может возвращать true в течение короткого времени после вызова destroyForcibly(). При необходимости этот метод можно объединить в цепочку с waitFor().
Требования к реализации:
Реализация этого метода по умолчанию вызывает destroy() и поэтому может не завершить процесс принудительно.
Примечание по реализации:
Настоятельно рекомендуется переопределять этот метод в конкретных реализациях данного класса, предоставляя реализацию, соответствующую требованиям.
Возвращает:
объект Process, представляющий принудительно завершенный процесс
Начиная с версии:
1.8

supportsNormalTermination

public boolean supportsNormalTermination()
Возвращает true, если реализация метода destroy() завершает процесс обычным образом; возвращает false, если реализация destroy немедленно завершает процесс принудительно.

Вызов этого метода для объектов Process, возвращаемых методами ProcessBuilder.start() и Runtime.exec(String), возвращает true или false в зависимости от реализации для конкретной платформы.

Требования к реализации:
Эта реализация выбрасывает экземпляр UnsupportedOperationException и не выполняет никаких других действий.
Возвращает:
true, если реализация метода destroy() завершает процесс обычным образом; в противном случае destroy() принудительно завершает процесс
Вызывает:
UnsupportedOperationException — если реализация Process не поддерживает эту операцию
Начиная с версии:
9

isAlive

public boolean isAlive()
Проверяет, активен ли процесс, представленный этим объектом Process.
Возвращает:
true, если процесс, представленный этим объектом Process, еще не завершился.
Начиная с версии:
1.8

pid

public long pid()
Возвращает идентификатор собственного процесса. Идентификатор собственного процесса — это идентификационный номер, который операционная система присваивает процессу.
Требования к реализации:
Реализация этого метода возвращает идентификатор процесса следующим образом: toHandle().pid().
Возвращает:
идентификатор собственного процесса
Вызывает:
UnsupportedOperationException — если реализация Process не поддерживает эту операцию
Начиная с версии:
9

onExit

public CompletableFuture<Process> onExit()
Возвращает CompletableFuture<Process>, связанный с завершением Process. CompletableFuture позволяет запускать зависимые функции или действия синхронно либо асинхронно после завершения процесса. После завершения процесса CompletableFuture completed независимо от кода завершения процесса.

Вызов onExit().get() ожидает завершения процесса и возвращает Process. Future можно использовать, чтобы проверить, завершен ли процесс, или дождаться его завершения. Отмена CompletableFuture не влияет на Process.

Процессы, возвращаемые методом ProcessBuilder.start(), переопределяют реализацию по умолчанию, предоставляя эффективный механизм ожидания завершения процесса.

Примечание API:
Использование onExit — это альтернатива waitFor, которая обеспечивает дополнительную параллельность и удобный доступ к результату выполнения Process. Лямбда-выражения можно использовать для вычисления результата выполнения Process. Если перед использованием значения необходимо выполнить другие действия, onExit позволяет освободить текущий поток и блокировать его только тогда, когда значение действительно понадобится.
Например, можно запустить процесс для сравнения двух файлов и получить логическое значение, указывающее, идентичны ли они:
    Process p = new ProcessBuilder("cmp", "f1", "f2").start();
    Future<Boolean> identical = p.onExit().thenApply(p1 -> p1.exitValue() == 0);
    ...
    if (identical.get()) { ... }
. Процесс может быть обнаружен как завершившийся с помощью isAlive() до завершения ComputableFuture и вызова зависимых действий.
Требования к реализации:
Эта реализация выполняет waitFor() в отдельном потоке, повторяя вызов до его успешного завершения. Если выполнение waitFor прерывается, статус прерывания потока сохраняется.

После успешного завершения waitFor() CompletableFuture завершается независимо от кода завершения процесса. Эта реализация может потреблять много памяти для стеков потоков, если одновременно ожидается завершение большого числа процессов.

Внешним реализациям следует переопределять этот метод и предоставлять более эффективную реализацию. Например, можно делегировать ожидание базовому процессу следующим образом:

   public CompletableFuture<Process> onExit() {
      return delegate.onExit().thenApply(p -> this);
   }
Возвращает:
новый CompletableFuture<Process> для Process
Начиная с версии:
9

toHandle

public ProcessHandle toHandle()
Возвращает ProcessHandle для Process. Process объекты, возвращаемые методами ProcessBuilder.start() и Runtime.exec(String), реализуют toHandle как эквивалент ProcessHandle.of(pid).
Требования к реализации:
Эта реализация выбрасывает экземпляр UnsupportedOperationException и не выполняет никаких других действий. Подклассы должны переопределить этот метод, чтобы предоставить ProcessHandle для процесса. Методы pid(), info(), children() и descendants(), если они не переопределены, работают с ProcessHandle.
Возвращает:
Возвращает ProcessHandle для Process
Выбрасывает:
UnsupportedOperationException — если реализация Process не поддерживает эту операцию
Начиная с версии:
9

info

public ProcessHandle.Info info()
Возвращает снимок сведений о процессе.

Экземпляр ProcessHandle.Info имеет методы доступа, возвращающие сведения о процессе, если они доступны.

Требования к реализации:
Эта реализация возвращает сведения о процессе в виде: toHandle().info().
Возвращает:
снимок сведений о процессе, всегда не равный null
Выбрасывает:
UnsupportedOperationException — если реализация Process не поддерживает эту операцию
Начиная с версии:
9

children

public Stream<ProcessHandle> children()
Возвращает снимок непосредственных дочерних процессов. Родительским процессом непосредственного дочернего процесса является данный процесс. Как правило, у процесса, который не работает, нет дочерних процессов.

Обратите внимание, что процессы создаются и завершаются асинхронно. Нет гарантии, что процесс работает.

Требования к реализации:
Эта реализация возвращает непосредственные дочерние процессы в виде: toHandle().children().
Возвращает:
последовательный Stream объектов ProcessHandle для процессов, являющихся непосредственными дочерними процессами данного процесса
Выбрасывает:
UnsupportedOperationException — если реализация Process не поддерживает эту операцию
Начиная с версии:
9

descendants

public Stream<ProcessHandle> descendants()
Возвращает снимок всех потомков процесса. Потомки процесса — это дочерние процессы данного процесса, а также потомки этих дочерних процессов, рекурсивно. Как правило, у процесса, который не работает, нет дочерних процессов.

Обратите внимание, что процессы создаются и завершаются асинхронно. Нет гарантии, что процесс работает.

Требования к реализации:
Эта реализация возвращает все дочерние процессы в виде: toHandle().descendants().
Возвращает:
последовательный Stream объектов ProcessHandle для процессов, являющихся потомками данного процесса
Выбрасывает:
UnsupportedOperationException — если реализация Process не поддерживает эту операцию
Начиная с версии:
9

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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/Process.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API