Spec-Zone.ru › OpenJDK 27

Класс ProcessBuilder

java.lang.Object
java.lang.ProcessBuilder
public final class ProcessBuilder extends Object
Этот класс используется для создания процессов операционной системы.

Каждый экземпляр ProcessBuilder управляет набором атрибутов процесса. Метод start() создаёт новый экземпляр Process с этими атрибутами. Метод start() можно вызывать несколько раз для создания новых подпроцессов с идентичными или связанными атрибутами.

Метод startPipeline можно вызвать для создания конвейера новых процессов, которые передают вывод каждого процесса непосредственно следующему процессу. Каждый процесс имеет атрибуты соответствующего ProcessBuilder.

Каждый построитель процессов управляет следующими атрибутами процесса:

  • команда — список строк, обозначающий файл внешней программы, которую нужно вызвать, и её аргументы, если они есть. Системно-зависимо, какие списки строк представляют собой допустимую команду операционной системы. Например, обычно каждый концептуальный аргумент является элементом этого списка, но в некоторых операционных системах программы должны самостоятельно разбивать строки командной строки на токены — в такой системе реализация Java может требовать, чтобы команды содержали ровно два элемента.
  • среда — системно-зависимое сопоставление переменных с значениями. Начальное значение представляет собой копию среды текущего процесса (см. System.getenv()).
  • рабочий каталог. Значением по умолчанию является текущий рабочий каталог текущего процесса, обычно каталог, указанный системным свойством user.dir.
  • источник стандартного ввода. По умолчанию подпроцесс считывает ввод из канала. Код Java может получить доступ к этому каналу через выходной поток, возвращаемый методом Process.getOutputStream(). Однако стандартный ввод можно перенаправить из другого источника с помощью метода redirectInput. В этом случае метод Process.getOutputStream() вернёт нулевой выходной поток, для которого:
    • методы write всегда выбрасывают IOException
    • метод close ничего не делает
  • назначение для стандартного вывода и стандартного потока ошибок. По умолчанию подпроцесс записывает стандартный вывод и стандартный поток ошибок в каналы. Код Java может получить доступ к этим каналам через входные потоки, возвращаемые методами Process.getInputStream() и Process.getErrorStream(). Однако стандартный вывод и стандартный поток ошибок можно перенаправить в другие места назначения с помощью методов redirectOutput и redirectError. В этом случае метод или методы Process.getInputStream() и/или Process.getErrorStream() вернут нулевой входной поток, для которого:
    • методы read всегда возвращают -1
    • метод available всегда возвращает 0
    • метод close ничего не делает
  • свойство redirectErrorStream. Изначально этому свойству присвоено значение false, что означает, что стандартный вывод и стандартный поток ошибок подпроцесса передаются в два отдельных потока, доступных с помощью методов Process.getInputStream() и Process.getErrorStream().

    Если свойству присвоено значение true, то:

    • стандартный поток ошибок объединяется со стандартным выводом и всегда направляется в одно и то же место назначения (это упрощает сопоставление сообщений об ошибках с соответствующим выводом)
    • общее место назначения стандартного потока ошибок и стандартного вывода можно перенаправить с помощью метода redirectOutput
    • любое перенаправление, заданное методом redirectError, игнорируется при создании подпроцесса
    • поток, возвращаемый методом Process.getErrorStream(), всегда будет нулевым входным потоком

Изменение атрибутов построителя процессов влияет на процессы, запускаемые впоследствии методом start() этого объекта, но никогда не влияет на ранее запущенные процессы или сам процесс Java.

Большинство проверок ошибок выполняется методом start(). Можно изменить состояние объекта так, что вызов метода start() завершится ошибкой. Например, присвоение атрибуту команды пустого списка не приведёт к выбросу исключения, если не вызвать метод start().

Обратите внимание, что этот класс не является потокобезопасным. Если несколько потоков одновременно обращаются к экземпляру ProcessBuilder и хотя бы один из потоков структурно изменяет один из атрибутов, доступ необходимо синхронизировать извне.

Запустить новый процесс с рабочим каталогом и средой по умолчанию несложно:


Process p = new ProcessBuilder("myCommand", "myArg").start();

Ниже приведён пример запуска процесса с изменёнными рабочим каталогом и средой, а также перенаправлением стандартного вывода и потока ошибок с добавлением данных в файл журнала:

    ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
    Map<String, String> env = pb.environment();
    env.put("VAR1", "myValue");
    env.remove("OTHERVAR");
    env.put("VAR2", env.get("VAR1") + "suffix");

    pb.directory(new File("myDir"));
    File log = new File("log");
    pb.redirectErrorStream(true);
    pb.redirectOutput(Redirect.appendTo(log));

    Process p = pb.start();
    assert pb.redirectInput() == Redirect.PIPE;
    assert pb.redirectOutput().file() == log;
    assert p.getInputStream().read() == -1;

Чтобы запустить процесс с явно заданным набором переменных среды, сначала вызовите Map.clear(), а затем добавьте переменные среды.

Если не указано иное, передача аргумента null конструктору или методу этого класса приведёт к выбросу исключения NullPointerException.

С версии:
1.5

Краткое описание вложенных классов

Модификатор и тип Класс Описание
static class  ProcessBuilder.Redirect
Представляет источник ввода подпроцесса или место назначения вывода подпроцесса.

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

Конструктор Описание
ProcessBuilder(String... command)
Создаёт построитель процессов с указанной программой операционной системы и аргументами.
ProcessBuilder(List<String> command)
Создаёт построитель процессов с указанной программой операционной системы и аргументами.

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

Модификатор и тип Метод Описание
List<String> command()
Возвращает программу операционной системы и аргументы этого построителя процессов.
ProcessBuilder command(String... command)
Задаёт программу операционной системы и аргументы этого построителя процессов.
ProcessBuilder command(List<String> command)
Задаёт программу операционной системы и аргументы этого построителя процессов.
File directory()
Возвращает рабочий каталог этого построителя процессов.
ProcessBuilder directory(File directory)
Задаёт рабочий каталог этого построителя процессов.
Map<String,String> environment()
Возвращает представление среды этого построителя процессов в виде карты строк.
ProcessBuilder inheritIO()
Задаёт источник и место назначения стандартного ввода-вывода подпроцесса такими же, как у текущего процесса Java.
ProcessBuilder.Redirect redirectError()
Возвращает место назначения стандартного потока ошибок этого построителя процессов.
ProcessBuilder redirectError(File file)
Задаёт файл в качестве места назначения стандартного потока ошибок этого построителя процессов.
ProcessBuilder redirectError(ProcessBuilder.Redirect destination)
Задаёт место назначения стандартного потока ошибок этого построителя процессов.
boolean redirectErrorStream()
Определяет, объединяет ли этот построитель процессов стандартный поток ошибок со стандартным выводом.
ProcessBuilder redirectErrorStream(boolean redirectErrorStream)
Задаёт свойство redirectErrorStream этого построителя процессов.
ProcessBuilder.Redirect redirectInput()
Возвращает источник стандартного ввода этого построителя процессов.
ProcessBuilder redirectInput(File file)
Задаёт файл в качестве источника стандартного ввода этого построителя процессов.
ProcessBuilder redirectInput(ProcessBuilder.Redirect source)
Задаёт источник стандартного ввода этого построителя процессов.
ProcessBuilder.Redirect redirectOutput()
Возвращает место назначения стандартного вывода этого построителя процессов.
ProcessBuilder redirectOutput(File file)
Задаёт файл в качестве места назначения стандартного вывода этого построителя процессов.
ProcessBuilder redirectOutput(ProcessBuilder.Redirect destination)
Задаёт место назначения стандартного вывода этого построителя процессов.
Process start()
Запускает новый процесс с использованием атрибутов этого построителя процессов.
static List<Process> startPipeline(List<ProcessBuilder> builders)
Запускает процесс для каждого ProcessBuilder, создавая конвейер процессов, связанных потоками стандартного вывода и стандартного ввода.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли этот объект какому-либо другому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии.
Финализация устарела и подлежит удалению в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает значение хеш-кода этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения определённого промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения определённого промежутка реального времени.

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

ProcessBuilder

public ProcessBuilder(List<String> command)
Создает построитель процессов с указанной программой операционной системы и аргументами. Этот конструктор не создает копию списка command. Последующие изменения списка будут отражены в состоянии построителя процессов. Проверка того, соответствует ли command допустимой команде операционной системы, не выполняется.
Параметры:
command — список, содержащий программу и ее аргументы

ProcessBuilder

public ProcessBuilder(String... command)
Создает построитель процессов с указанной программой операционной системы и аргументами. Это удобный конструктор, который задает команду построителя процессов в виде списка строк, содержащего те же строки, что и массив command, в том же порядке. Проверка того, соответствует ли command допустимой команде операционной системы, не выполняется.
Параметры:
command — массив строк, содержащий программу и ее аргументы

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

command

public ProcessBuilder command(List<String> command)
Задает программу операционной системы и аргументы для этого построителя процессов. Этот метод не создает копию списка command. Последующие изменения списка будут отражены в состоянии построителя процессов. Проверка того, соответствует ли command допустимой команде операционной системы, не выполняется.
Параметры:
command — список, содержащий программу и ее аргументы
Возвращает:
этот построитель процессов

command

public ProcessBuilder command(String... command)
Задает программу операционной системы и аргументы для этого построителя процессов. Это удобный метод, который задает команду в виде списка строк, содержащего те же строки, что и массив command, в том же порядке. Проверка того, соответствует ли command допустимой команде операционной системы, не выполняется.
Параметры:
command — массив строк, содержащий программу и ее аргументы
Возвращает:
этот построитель процессов

command

public List<String> command()
Возвращает программу операционной системы и аргументы для этого построителя процессов. Возвращаемый список не является копией. Последующие изменения списка будут отражены в состоянии построителя процессов.
Возвращает:
программу и аргументы этого построителя процессов

environment

public Map<String,String> environment()
Возвращает представление среды этого построителя процессов в виде карты строк. При создании построителя процессов среда инициализируется копией текущей среды процесса (см. System.getenv()). Впоследствии дочерние процессы, запущенные методом start() этого объекта, будут использовать эту карту в качестве своей среды.

Возвращенный объект можно изменять с помощью обычных операций Map. Эти изменения будут видны дочерним процессам, запущенным методом start(). Экземпляры ProcessBuilder всегда содержат независимые среды процессов, поэтому изменения возвращенной карты никогда не будут отражены ни в каком другом экземпляре ProcessBuilder или в значениях, возвращаемых методом System.getenv.

Если система не поддерживает переменные среды, возвращается пустая карта.

Возвращенная карта не допускает ключи или значения, равные null. Попытка вставить ключ или значение null либо проверить их наличие приведет к выбросу исключения NullPointerException. Попытка проверить наличие ключа или значения, тип которого не является String, приведет к выбросу исключения ClassCastException.

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

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

Возвращенная карта и ее представления коллекций могут не соответствовать общему контракту методов Object.equals(Object) и Object.hashCode().

На большинстве платформ возвращенная карта, как правило, чувствительна к регистру.

При передаче информации дочернему процессу Java обычно предпочтительнее использовать системные свойства, а не переменные среды.

Возвращает:
среду этого построителя процессов
См. также:
  • Runtime.exec(String[],String[],java.io.File)
  • System.getenv()

directory

public File directory()
Возвращает рабочий каталог этого построителя процессов. Впоследствии дочерние процессы, запущенные методом start() этого объекта, будут использовать его в качестве рабочего каталога. Возвращенное значение может быть null — это означает, что в качестве рабочего каталога дочернего процесса следует использовать рабочий каталог текущего процесса Java, обычно каталог, указанный системным свойством user.dir.
Возвращает:
рабочий каталог этого построителя процессов

directory

public ProcessBuilder directory(File directory)
Задает рабочий каталог этого построителя процессов. Впоследствии дочерние процессы, запущенные методом start() этого объекта, будут использовать его в качестве рабочего каталога. Аргумент может быть null — это означает, что в качестве рабочего каталога дочернего процесса следует использовать рабочий каталог текущего процесса Java, обычно каталог, указанный системным свойством user.dir.
Параметры:
directory — новый рабочий каталог
Возвращает:
этот построитель процессов

redirectInput

public ProcessBuilder redirectInput(ProcessBuilder.Redirect source)
Задает источник стандартного ввода для этого построителя процессов. Впоследствии дочерние процессы, запущенные методом start() этого объекта, будут получать стандартный ввод из этого источника.

Если источником является Redirect.PIPE (начальное значение), то в стандартный ввод дочернего процесса можно записывать через выходной поток, возвращаемый методом Process.getOutputStream(). Если источнику задано любое другое значение, метод Process.getOutputStream() вернет выходной поток null.

Параметры:
source — новый источник стандартного ввода
Возвращает:
этот построитель процессов
Выбрасывает:
IllegalArgumentException — если перенаправление не соответствует допустимому источнику данных, то есть имеет тип WRITE или APPEND
С версии:
1.7

redirectOutput

public ProcessBuilder redirectOutput(ProcessBuilder.Redirect destination)
Задает назначение стандартного вывода для этого построителя процессов. Впоследствии дочерние процессы, запущенные методом start() этого объекта, будут отправлять стандартный вывод в это назначение.

Если назначением является Redirect.PIPE (начальное значение), то стандартный вывод дочернего процесса можно считывать через входной поток, возвращаемый методом Process.getInputStream(). Если назначению задано любое другое значение, метод Process.getInputStream() вернет входной поток null.

Параметры:
destination — новое назначение стандартного вывода
Возвращает:
этот построитель процессов
Выбрасывает:
IllegalArgumentException — если перенаправление не соответствует допустимому назначению данных, то есть имеет тип READ
С версии:
1.7

redirectError

public ProcessBuilder redirectError(ProcessBuilder.Redirect destination)
Задает назначение стандартного потока ошибок для этого построителя процессов. Впоследствии дочерние процессы, запущенные методом start() этого объекта, будут отправлять стандартный поток ошибок в это назначение.

Если назначением является Redirect.PIPE (начальное значение), то вывод ошибок дочернего процесса можно считывать через входной поток, возвращаемый методом Process.getErrorStream(). Если назначению задано любое другое значение, метод Process.getErrorStream() вернет входной поток null.

Если свойству redirectErrorStream задано значение true, перенаправление, заданное этим методом, не действует.

Параметры:
destination — новое назначение стандартного потока ошибок
Возвращает:
этот построитель процессов
Выбрасывает:
IllegalArgumentException — если перенаправление не соответствует допустимому назначению данных, то есть имеет тип READ
С версии:
1.7

redirectInput

public ProcessBuilder redirectInput(File file)
Задает файл в качестве источника стандартного ввода для этого построителя процессов.

Это удобный метод. Вызов вида redirectInput(file) действует точно так же, как вызов redirectInput (Redirect.from(file)).

Параметры:
file — новый источник стандартного ввода
Возвращает:
этот построитель процессов
С версии:
1.7

redirectOutput

public ProcessBuilder redirectOutput(File file)
Задает файл в качестве назначения стандартного вывода для этого построителя процессов.

Это удобный метод. Вызов вида redirectOutput(file) действует точно так же, как вызов redirectOutput (Redirect.to(file)).

Параметры:
file — новое назначение стандартного вывода
Возвращает:
этот построитель процессов
С версии:
1.7

redirectError

public ProcessBuilder redirectError(File file)
Задает файл в качестве назначения стандартного потока ошибок для этого построителя процессов.

Это удобный метод. Вызов вида redirectError(file) действует точно так же, как вызов redirectError (Redirect.to(file)).

Параметры:
file — новое назначение стандартного потока ошибок
Возвращает:
этот построитель процессов
С версии:
1.7

redirectInput

public ProcessBuilder.Redirect redirectInput()
Возвращает источник стандартного ввода для этого построителя процессов. Впоследствии дочерние процессы, запущенные методом start() этого объекта, будут получать стандартный ввод из этого источника. Начальное значение — Redirect.PIPE.
Возвращает:
источник стандартного ввода для этого построителя процессов
С версии:
1.7

redirectOutput

public ProcessBuilder.Redirect redirectOutput()
Возвращает назначение стандартного вывода для этого построителя процессов. Впоследствии дочерние процессы, запущенные методом start() этого объекта, будут перенаправлять стандартный вывод в это назначение. Начальное значение — Redirect.PIPE.
Возвращает:
назначение стандартного вывода для этого построителя процессов
С версии:
1.7

redirectError

public ProcessBuilder.Redirect redirectError()
Возвращает назначение стандартного потока ошибок для этого построителя процессов. Впоследствии дочерние процессы, запущенные методом start() этого объекта, будут перенаправлять стандартный поток ошибок в это назначение. Начальное значение — Redirect.PIPE.
Возвращает:
назначение стандартного потока ошибок для этого построителя процессов
С версии:
1.7

inheritIO

public ProcessBuilder inheritIO()
Задает для источника и назначения стандартного ввода-вывода дочернего процесса те же значения, что и для текущего процесса Java.

Это удобный метод. Вызов вида

     pb.inheritIO()
действует точно так же, как вызов
     pb.redirectInput(Redirect.INHERIT)
         .redirectOutput(Redirect.INHERIT)
         .redirectError(Redirect.INHERIT)
Это обеспечивает поведение, эквивалентное поведению большинства интерпретаторов команд операционных систем или стандартной функции библиотеки C system().
Примечание по реализации:
Если процесс started, а {#code System.out} и/или {#code System.err} закрыты в текущем процессе, соответствующий вывод дочернего процесса будет отброшен.
Возвращает:
этот построитель процессов
С версии:
1.7

redirectErrorStream

public boolean redirectErrorStream()
Показывает, объединяет ли этот построитель процессов стандартный поток ошибок со стандартным выводом.

Если этому свойству задано значение true, то любой вывод ошибок, созданный впоследствии дочерними процессами, запущенными методом start() этого объекта, будет объединен со стандартным выводом, и оба потока можно будет считывать методом Process.getInputStream(). Это упрощает сопоставление сообщений об ошибках с соответствующим выводом. Начальное значение — false.

Возвращает:
значение свойства redirectErrorStream этого построителя процессов

redirectErrorStream

public ProcessBuilder redirectErrorStream(boolean redirectErrorStream)
Задает значение свойства redirectErrorStream этого построителя процессов.

Если этому свойству задано значение true, то любой вывод ошибок, созданный впоследствии дочерними процессами, запущенными методом start() этого объекта, будет объединен со стандартным выводом, и оба потока можно будет считывать методом Process.getInputStream(). Это упрощает сопоставление сообщений об ошибках с соответствующим выводом. Начальное значение — false.

Параметры:
redirectErrorStream — новое значение свойства
Возвращает:
этот построитель процессов

start

public Process start() throws IOException
Запускает новый процесс с атрибутами этого построителя процессов.

Новый процесс выполнит команду и аргументы, заданные методом command(), в рабочем каталоге, заданном методом directory(), и со средой процесса, заданной методом environment().

Этот метод проверяет, является ли команда допустимой командой операционной системы. Набор допустимых команд зависит от системы, но как минимум команда должна быть непустым списком строк, не содержащих null.

В некоторых операционных системах для запуска процесса может требоваться минимальный набор зависящих от системы переменных среды. В результате дочерний процесс может унаследовать дополнительные параметры переменных среды помимо указанных в environment() построителя процессов. Минимальный набор зависящих от системы переменных среды может переопределять значения, заданные в среде.

Запуск процесса операционной системы в значительной степени зависит от системы. Среди множества возможных проблем:

  • Не найден файл программы операционной системы.
  • Доступ к файлу программы запрещен.
  • Рабочий каталог не существует.
  • В аргументе команды содержится недопустимый символ, например NUL.

В таких случаях будет выброшено исключение. Точный тип исключения зависит от системы, но оно всегда будет подклассом IOException.

Если операционная система не поддерживает создание процессов, будет выброшено исключение UnsupportedOperationException.

Последующие изменения этого построителя процессов не повлияют на возвращенный объект Process.

Примечание по реализации:
В эталонной реализации можно включить ведение журнала команды, аргументов, каталога, трассировки стека и идентификатора процесса. Записываемая в журнал информация может содержать конфиденциальные сведения, поэтому следует тщательно оценить риск их раскрытия. Ведение журнала включается, когда уровень журналирования системного регистратора с именем java.lang.ProcessBuilder равен Level.DEBUG или Level.TRACE. При включении для Level.DEBUG в журнал записываются только идентификатор процесса, каталог, команда и трассировка стека. При включении для Level.TRACE вместе с идентификатором процесса, каталогом, командой и трассировкой стека записываются аргументы.
Возвращает:
новый объект Process для управления дочерним процессом
Выбрасывает:
NullPointerException — если элемент списка команд равен null
IndexOutOfBoundsException — если список команд пуст (его размер равен 0)
UnsupportedOperationException — если операционная система не поддерживает создание процессов.
IOException — если произошла ошибка ввода-вывода
См. также:
  • Runtime.exec(String[], String[], java.io.File)

startPipeline

public static List<Process> startPipeline(List<ProcessBuilder> builders) throws IOException
Запускает процесс для каждого объекта ProcessBuilder, создавая конвейер процессов, связанных потоками стандартного вывода и стандартного ввода. Для запуска соответствующего процесса используются атрибуты каждого объекта ProcessBuilder, за исключением того, что при запуске каждого процесса его стандартный вывод направляется в стандартный ввод следующего процесса. Перенаправления стандартного ввода первого процесса и стандартного вывода последнего процесса инициализируются с использованием настроек перенаправления соответствующих объектов ProcessBuilder. Все остальные перенаправления ProcessBuilder должны иметь значение Redirect.PIPE.

Потоки ввода и вывода между промежуточными процессами недоступны. Метод standard input всех процессов, кроме первого, возвращает выходные потоки null. Метод standard output всех процессов, кроме последнего, возвращает входные потоки null.

Свойство redirectErrorStream() каждого объекта ProcessBuilder применяется к соответствующему процессу. Если ему задано значение true, поток ошибок записывается в тот же поток, что и стандартный вывод.

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

Метод startPipeline выполняет для каждого объекта ProcessBuilder те же проверки, что и метод start(). Каждый новый процесс выполняет команду и аргументы, заданные методом command() соответствующего построителя процессов, в рабочем каталоге, заданном его методом directory(), и со средой процесса, заданной его методом environment().

Команда каждого построителя процессов проверяется на допустимость для операционной системы. Набор допустимых команд зависит от системы, но как минимум команда должна быть непустым списком строк, не содержащих null.

В некоторых операционных системах для запуска процесса может требоваться минимальный набор зависящих от системы переменных среды. В результате дочерний процесс может унаследовать дополнительные параметры переменных среды помимо указанных в environment() построителя процессов. Минимальный набор зависящих от системы переменных среды может переопределять значения, заданные в среде.

Запуск процесса операционной системы в значительной степени зависит от системы. Среди множества возможных проблем:

  • Не найден файл программы операционной системы.
  • Доступ к файлу программы запрещен.
  • Рабочий каталог не существует.
  • В аргументе команды содержится недопустимый символ, например NUL.

В таких случаях будет выброшено исключение. Точный тип исключения зависит от системы, но оно всегда будет подклассом IOException.

Если операционная система не поддерживает создание процессов, будет выброшено исключение UnsupportedOperationException.

Последующие изменения любых указанных построителей не повлияют на возвращенный объект Process.

Примечание к API:
Например, чтобы подсчитать уникальные импорты для всех файлов в иерархии каталогов на платформе, совместимой с Unix:
    String directory = "/home/duke/src";
    ProcessBuilder[] builders = {
             new ProcessBuilder("find", directory, "-type", "f"),
             new ProcessBuilder("xargs", "grep", "-h", "^import "),
             new ProcessBuilder("awk", "{print $2;}"),
             new ProcessBuilder("sort", "-u")};
    List<Process> processes = ProcessBuilder.startPipeline( Arrays.asList(builders));
    Process last = processes.get(processes.size() - 1);
    try (InputStream is = last.getInputStream();
        Reader isr = new InputStreamReader(is);
        BufferedReader r = new BufferedReader(isr)) {
        long count = r.lines().count();
    }
Примечание по реализации:
В эталонной реализации можно включить ведение журнала для каждого созданного процесса. Подробности см. в описании метода start().
Параметры:
builders — список объектов ProcessBuilder
Возвращает:
List<Process>ы, запущенные соответствующими объектами ProcessBuilder
Выбрасывает:
IllegalArgumentException — если любое из перенаправлений, кроме стандартного ввода первого построителя и стандартного вывода последнего построителя, не имеет значения ProcessBuilder.Redirect.PIPE.
NullPointerException — если элемент списка команд равен null, элемент списка ProcessBuilder равен null или аргумент builders равен null
IndexOutOfBoundsException — если список команд пуст (его размер равен 0)
UnsupportedOperationException — если операционная система не поддерживает создание процессов
IOException — если произошла ошибка ввода-вывода
С версии:
9

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, включая концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее дочерних компаний в США и других странах.
Авторские права © 1993, 2026, 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.

Spec-Zone.ru

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