Spec-Zone.ru › OpenJDK 21

Класс 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.

Since:
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)
Запускает Process для каждого 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.

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

Возвращаемая карта не допускает нулевых ключей или значений. Попытка вставки или запроса наличия нулевого ключа или значения приведёт к исключению 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() вернёт нулевой поток вывода.

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

redirectOutput

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

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

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

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.

Implementation Note:
В реализации по умолчанию можно включить ведение журнала команды, аргументов, каталога, стека вызовов и идентификатора процесса. Записанная информация может содержать конфиденциальную информацию о безопасности, и потенциальное раскрытие этой информации следует тщательно рассмотреть. Ведение журнала включено, когда уровень ведения журнала для системного логгера под именем java.lang.ProcessBuilder равен Level.DEBUG или Level.TRACE. При включении для Level.DEBUG регистрируется только идентификатор процесса, каталог, команда и стек вызовов. При включении для Level.TRACE аргументы включаются вместе с идентификатором процесса, каталогом, командой и стеком вызовов.
Returns:
новый объект Process для управления подпроцессом
Throws:
NullPointerException - если элемент списка команд равен null
IndexOutOfBoundsException - если команда является пустым списком (имеет размер 0)
SecurityException - если менеджер безопасности существует и
  • его метод checkExec не разрешает создание подпроцесса, или
  • стандартный поток ввода для подпроцесса был перенаправлен из файла и метод менеджера безопасности checkRead запрещает чтение из файла, или
  • стандартный поток вывода или стандартный поток ошибок подпроцесса был перенаправлен в файл и метод менеджера безопасности 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 вызывается с первым компонентом каждого массива билдера процесса в качестве аргумента. Это может привести к тому, что будет брошено исключение 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();
 }
 
Implementation Note:
В реализации по умолчанию, регистрация каждого созданного процесса может быть включена, см. start() для получения подробной информации.
Parameters:
builders - список ProcessBuilder
Returns:
список List<Process> процессов, запущенных из соответствующего ProcessBuilder
Throws:
IllegalArgumentException - если любое из перенаправлений, кроме стандартного ввода первого билдера и стандартного вывода последнего билдера, не является ProcessBuilder.Redirect.PIPE.
NullPointerException - если элемент списка команд равен null, или элемент списка ProcessBuilder равен null, или список билдеров равен null
IndexOutOfBoundsException - если команда является пустым списком (имеет размер 0)
SecurityException - если менеджер безопасности существует и
  • его метод checkExec не позволяет создать подпроцесс, или
  • стандартный вход в подпроцесс был перенаправлен из файла и метод менеджера безопасности checkRead запрещает чтение из файла, или
  • стандартный вывод или стандартная ошибка подпроцесса были перенаправлены в файл и метод менеджера безопасности checkWrite запрещает запись в файл
UnsupportedOperationException - Если операционная система не поддерживает создание процессов
IOException - если возникает ошибка ввода-вывода
Since:
9

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

Spec-Zone.ru

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