Spec-Zone.ru › OpenJDK 24

Класс 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, а продолжает выполняться асинхронно.

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

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

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

С:
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 для процесса.
abstract int waitFor()
Принудительно ожидает завершения процесса, представленного этим объектом Process.
boolean waitFor(long timeout, TimeUnit unit)
Принудительно ожидает завершения процесса, представленного этим объектом Process, или до истечения указанного времени ожидания.
boolean waitFor(Duration duration)
Принудительно ожидает завершения процесса, представленного этим объектом Process, или до истечения указанного интервала ожидания.

Методы, объявленные в классе java.lang.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 Note:
При записи в getOutputStream() и в outputWriter() или outputWriter(Charset), следует вызвать BufferedWriter.flush перед записью в OutputStream.
Implementation Note:
Реализация: Рекомендуется буферизовать возвращаемый поток вывода.
Returns:
поток вывода, подключенный к стандартному вводу процесса

getInputStream

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

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

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

API Note:
Используйте getInputStream() и inputReader() с осторожностью. BufferedReader может буферизовать ввод из потока.
Implementation Note:
Реализация: Рекомендуется буферизовать возвращаемый поток ввода.
Returns:
поток ввода, подключенный к стандартному выводу процесса

getErrorStream

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

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

API Note:
Используйте getErrorStream() и errorReader() с осторожностью. BufferedReader может буферизовать ввод из потока ошибок.
Implementation Note:
Реализация: Рекомендуется буферизовать возвращаемый поток ввода.
Returns:
поток ввода, подключенный к выводу ошибок процесса

inputReader

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

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

Returns:
BufferedReader, использующий native.encoding, если поддерживается, в противном случае Charset.defaultCharset()
Since:
17

inputReader

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

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

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

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

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

API Note:
Использование как getInputStream(), так и inputReader(Charset) приводит к непредсказуемому поведению, так как буферизованный читатель читает вперёд из потока ввода.

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

Parameters:
charset - Charset, используемый для декодирования байтов в символы
Returns:
BufferedReader для стандартного вывода процесса, используя charset
Throws:
NullPointerException - если charset null
IllegalStateException - если вызывается более одного раза с разными аргументами кодировки
Since:
17

errorReader

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

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

Returns:
BufferedReader, использующий native.encoding, если поддерживается, в противном случае Charset.defaultCharset()
Since:
17

errorReader

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

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

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

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

API Note:
Использование и getErrorStream() и errorReader(Charset) приводит к непредсказуемому поведению, так как буферизованный читатель считывает данные из потока ошибок предварительно.

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

Parameters:
charset - Charset для декодирования байтов в символы
Returns:
BufferedReader для стандартного потока ошибок процесса, используя charset
Throws:
NullPointerException - если charset является null
IllegalStateException - если вызывается более одного раза с разными аргументами charset
Since:
17

outputWriter

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

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

Returns:
BufferedWriter для стандартного входного потока процесса, используя кодировку для native.encoding свойства системы
Since:
17

outputWriter

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

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

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

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

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

При записи в оба getOutputStream() и либо outputWriter(), либо outputWriter(Charset), необходимо вызвать BufferedWriter.flush() перед записью в OutputStream.

Parameters:
charset - Charset для кодирования символов в байты
Returns:
BufferedWriter для стандартного входного потока процесса, используя charset
Throws:
NullPointerException - если charset является null
IllegalStateException - если вызывается более одного раза с разными аргументами charset
Since:
17

waitFor

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

waitFor

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

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

Implementation Requirements:
Предпочтительная реализация этого метода опрашивает exitValue, чтобы проверить, завершился ли процесс.
Implementation Note:
Конкретные реализации этого класса настоятельно рекомендуют переопределить этот метод с более эффективной реализацией.
Parameters:
timeout - максимальное время ожидания
unit - единица измерения времени для аргумента timeout
Returns:
true, если процесс завершился, и false, если время ожидания истекло до завершения процесса.
Throws:
InterruptedException - если текущая нить прерывается во время ожидания.
NullPointerException - если unit равен null
Since:
1.8

waitFor

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

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

Implementation Requirements:
Предпочтительная реализация этого метода опрашивает exitValue, чтобы проверить, завершился ли процесс.
Implementation Note:
Конкретные реализации этого класса настоятельно рекомендуют переопределить этот метод с более эффективной реализацией.
Parameters:
duration - максимальное время ожидания; если не положительно, этот метод возвращается немедленно.
Returns:
true, если процесс завершился, и false, если время ожидания истекло до завершения процесса.
Throws:
InterruptedException - если текущая нить прерывается во время ожидания.
NullPointerException - если duration равно null
Since:
24

exitValue

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

destroy

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

CompletableFuture из onExit() завершается, когда процесс завершается.

destroyForcibly

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

CompletableFuture из onExit() завершается, когда процесс завершается.

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

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

supportsNormalTermination

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

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

Implementation Requirements:
Эта реализация выбрасывает экземпляр UnsupportedOperationException и не выполняет никаких других действий.
Returns:
true, если реализация destroy() должна нормально завершить процесс; в противном случае destroy() принудительно завершает процесс
Throws:
UnsupportedOperationException - если реализация процесса не поддерживает эту операцию
Since:
9

isAlive

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

pid

public long pid()
Возвращает системный идентификатор процесса. Системный идентификатор процесса — это число, которое операционная система присваивает процессу.
Implementation Requirements:
Реализация этого метода возвращает идентификатор процесса как: toHandle().pid().
Returns:
системный идентификатор процесса
Throws:
UnsupportedOperationException - если реализация процесса не поддерживает эту операцию
Since:
9

onExit

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

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

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

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

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

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


    public CompletableFuture<Process> onExit() {
       return delegate.onExit().thenApply(p -> this);
    }
 
Returns:
новый CompletableFuture<Process> для процесса
Since:
9

toHandle

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

info

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

Объект ProcessHandle.Info имеет методы-акцессоры, которые возвращают информацию о процессе, если она доступна.

Implementation Requirements:
Эта реализация возвращает информацию о процессе как: toHandle().info().
Returns:
моментальный снимок информации о процессе, всегда не null
Throws:
UnsupportedOperationException - если реализация процесса не поддерживает эту операцию
Since:
9

children

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

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

Implementation Requirements:
Эта реализация возвращает прямых дочерних процессов как: toHandle().children().
Returns:
последовательная Stream объектов ProcessHandles для процессов, которые являются прямыми дочерними процессами
Throws:
UnsupportedOperationException - если реализация процесса не поддерживает эту операцию
Since:
9

descendants

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

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

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

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/lang/Process.html

Spec-Zone.ru

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