Spec-Zone.ru › OpenJDK 17

Класс ProcessBuilder

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

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

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

Каждый объект 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(), всегда будет нулевым входным потоком

Изменение атрибутов ProcessBuilder повлияет на процессы, которые впоследствии будут запущены с помощью метода 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.

Since:
1.5

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

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

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

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

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

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

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

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

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

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-значений. Попытка вставки или запроса наличия null-ключа или null-значения приведёт к исключению NullPointerException. Попытка запроса наличия ключа или значения, которые не являются строкой String, приведёт к исключению ClassCastException.

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

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

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

Возвращаемая карта, как правило, регистрозависимая на всех платформах.

Если существует менеджер безопасности, его метод checkPermission вызывается с разрешением RuntimePermission("getenv.*"). Это может привести к выбросу исключения SecurityException.

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

Возвращает:
среда этого конструктора процесса
Выбрасывает:
SecurityException - если существует менеджер безопасности, и его метод checkPermission не позволяет получить доступ к среде процесса
См. также:
  • 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
END_OF_DOCUMENT_MARKER

redirectError

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

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

Если атрибут redirectErrorStream был установлен true, то перенаправление, заданное этим методом, не имеет эффекта.

Parameters:
destination - новое место назначения стандартного потока ошибок
Returns:
этот обработчик процесса
Throws:
IllegalArgumentException - если перенаправление не соответствует допустимому месту назначения данных, то есть имеет тип READ
Since:
1.7

redirectInput

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

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

Parameters:
file - новый источник стандартного потока ввода
Returns:
этот обработчик процесса
Since:
1.7

redirectOutput

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

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

Parameters:
file - новое место назначения стандартного потока вывода
Returns:
этот обработчик процесса
Since:
1.7

redirectError

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

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

Parameters:
file - новое место назначения стандартного потока ошибок
Returns:
этот обработчик процесса
Since:
1.7

redirectInput

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

redirectOutput

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

redirectError

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

inheritIO

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

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

 
 pb.inheritIO()
 
ведет себя точно так же, как вызов
 
 pb.redirectInput(Redirect.INHERIT)
   .redirectOutput(Redirect.INHERIT)
   .redirectError(Redirect.INHERIT)
 
Это обеспечивает поведение, эквивалентное большинству интерпретаторов команд операционных систем или стандартной функции C-библиотеки system().
Returns:
этот обработчик процесса
Since:
1.7

redirectErrorStream

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

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

Returns:
свойство обработчика процесса redirectErrorStream

redirectErrorStream

public ProcessBuilder redirectErrorStream(boolean redirectErrorStream)
Устанавливает свойство redirectErrorStream этого обработчика процесса.

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

Parameters:
redirectErrorStream - новое значение свойства
Returns:
этот обработчик процесса

start

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

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

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

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

Если существует менеджер безопасности, вызывается его метод checkExec с первым компонентом массива command этого объекта в качестве аргумента. Это может привести к исключению SecurityException.

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

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

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

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

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

Returns:
новый объект Process для управления подпроцессом
Throws:
NullPointerException - если элемент списка команд равен null
IndexOutOfBoundsException - если команда является пустым списком (имеет размер 0)
SecurityException - если менеджер безопасности существует и
  • его метод checkExec не разрешает создание подпроцесса, или
  • стандартный поток ввода подпроцесса был перенаправлен из файла с помощью метода redirectInput и метод менеджера безопасности checkRead запрещает чтение файла, или
  • стандартный поток вывода или стандартный поток ошибок подпроцесса был перенаправлен в файл с помощью метода redirectOutput и метод менеджера безопасности checkWrite запрещает запись в файл
UnsupportedOperationException - Если операционная система не поддерживает создание процессов.
IOException - если произошла ошибка ввода/вывода
See Also:
  • 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 всех процессов, кроме первого, является нулевым потоком вывода. Поток standard output всех процессов, кроме последнего, является нулевым потоком ввода.

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

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

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

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

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

Если существует менеджер безопасности, его метод checkExec вызывается с первым компонентом массива command каждого билдера процесса в качестве аргумента. Это может привести к тому, что будет брошено исключение SecurityException.

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

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

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

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

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

API Note:
Например, для подсчета уникальных импортов для всех файлов в иерархии файлов на платформе, совместимой с 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();
 }
 
Parameters:
builders - список ProcessBuilders
Returns:
массив процессов, запущенных из соответствующих ProcessBuilder
Throws:
IllegalArgumentException - если какое-либо из перенаправлений, кроме стандартного ввода первого билдера и стандартного вывода последнего билдера, не является ProcessBuilder.Redirect.PIPE.
NullPointerException - если элемент списка команд равен null, или элемент списка ProcessBuilder равен null, или аргумент билдеров равен null
IndexOutOfBoundsException - если команда является пустым списком (имеет размер 0)
SecurityException - если менеджер безопасности существует и
  • его метод checkExec не разрешает создание подпроцесса, или
  • стандартный ввод подпроцесса был перенаправлен из файла и метод менеджера безопасности checkRead запрещает чтение из файла, или
  • стандартный вывод или стандартная ошибка подпроцесса были перенаправлены в файл и метод менеджера безопасности checkWrite запрещает запись в файл
UnsupportedOperationException - если операционная система не поддерживает создание процессов
IOException - если произошла ошибка ввода-вывода
Since:
9

© 1993, 2021, 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/17/docs/api/java.base/java/lang/ProcessBuilder.html

Spec-Zone.ru

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