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