Each ProcessBuilder instance manages a collection
of process attributes. The start() method creates a new
Process instance with those attributes. The start() method can be invoked repeatedly from the same instance
to create new subprocesses with identical or related attributes.
The startPipeline method can be invoked to create
a pipeline of new processes that send the output of each process
directly to the next process. Each process has the attributes of
its respective ProcessBuilder.
Each process builder manages these process attributes:
System#getenv()).
user.dir.
Process#getOutputStream(). However, standard input may
be redirected to another source using
redirectInput.
In this case, Process#getOutputStream() will return a
null output stream, for which:
Process#getInputStream() and
Process#getErrorStream(). However, standard output and
standard error may be redirected to other destinations using
redirectOutput and
redirectError.
In this case, Process#getInputStream() and/or
Process#getErrorStream() will return a null input
stream, for which:
false, meaning that the standard output and error
output of a subprocess are sent to two separate streams, which can
be accessed using the Process#getInputStream() and Process#getErrorStream() methods.
If the value is set to true, then:
redirectOutput
redirectError
method is ignored when creating a subprocess
Process#getErrorStream() will
always be a null input stream
Modifying a process builder's attributes will affect processes
subsequently started by that object's start() method, but
will never affect previously started processes or the Java process
itself.
Most error checking is performed by the start() method.
It is possible to modify the state of an object so that start() will fail. For example, setting the command attribute to
an empty list will not throw an exception unless start()
is invoked.
Note that this class is not synchronized.
If multiple threads access a ProcessBuilder instance
concurrently, and at least one of the threads modifies one of the
attributes structurally, it must be synchronized externally.
Starting a new process which uses the default working directory and environment is easy:
Process p = new ProcessBuilder("myCommand", "myArg").start();
Here is an example that starts a process with a modified working directory and environment, and redirects standard output and error to be appended to a log file:
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;
To start a process with an explicit set of environment
variables, first call Map.
before adding environment variables.
Unless otherwise noted, passing a null argument to a constructor
or method in this class will cause a NullPointerException to be
thrown.
| Modifier and Type | Class and Description |
|---|---|
| pack-priv static class | ProcessBuilder.
Implements a null input stream. |
| pack-priv static class | ProcessBuilder.
Implements a null output stream. |
| public abstract static class | ProcessBuilder.
Represents a source of subprocess input or a destination of subprocess output. |
| pack-priv static class | ProcessBuilder.
Private implementation subclass of Redirect that holds a FileDescriptor for the output of a previously started Process. |
| Modifier and Type | Field and Description |
|---|---|
| private List | |
| private File | |
| private Map | |
| private static System. | |
| private boolean | |
| private ProcessBuilder. |
| Access | Constructor and Description |
|---|---|
| public | ProcessBuilder(List<String>
the list containing the program and its arguments command)Constructs a process builder with the specified operating system program and arguments. |
| public | ProcessBuilder(String...
a string array containing the program and its arguments command)Constructs a process builder with the specified operating system program and arguments. |
| Modifier and Type | Method and Description |
|---|---|
| public ProcessBuilder | |
| public ProcessBuilder | |
| public List | Returns: this process builder's program and its argumentsReturns this process builder's operating system program and arguments. |
| public File | Returns: this process builder's working directoryReturns this process builder's working directory. |
| public ProcessBuilder | |
| public Map | Returns: this process builder's environmentReturns a string map view of this process builder's environment. |
| pack-priv ProcessBuilder | |
| public ProcessBuilder | Returns: this process builderSets the source and destination for subprocess standard I/O to be the same as those of the current Java process. |
| public ProcessBuilder | Returns: this process builderthe new standard error destination destinationSets this process builder's standard error destination. |
| public ProcessBuilder | Returns: this process builderthe new standard error destination file)Sets this process builder's standard error destination to a file. |
| public ProcessBuilder. | Returns: this process builder's standard error destinationReturns this process builder's standard error destination. |
| public boolean | Returns: this process builder'sredirectErrorStream propertyTells whether this process builder merges standard error and standard output. |
| public ProcessBuilder | Returns: this process builderthe new property value redirectErrorStream)Sets this process builder's |
| public ProcessBuilder | Returns: this process builderthe new standard input source sourceSets this process builder's standard input source. |
| public ProcessBuilder | Returns: this process builderthe new standard input source file)Sets this process builder's standard input source to a file. |
| public ProcessBuilder. | Returns: this process builder's standard input sourceReturns this process builder's standard input source. |
| public ProcessBuilder | Returns: this process builderthe new standard output destination destinationSets this process builder's standard output destination. |
| public ProcessBuilder | Returns: this process builderthe new standard output destination file)Sets this process builder's standard output destination to a file. |
| public ProcessBuilder. | Returns: this process builder's standard output destinationReturns this process builder's standard output destination. |
| private ProcessBuilder. | Returns: the array of redirectsReturn the array of redirects, creating the default as needed. |
| public Process | |
| private Process | Returns: the new Processarray of redirects for stdin, stdout, stderr redirectsStart a new Process using an explicit array of redirects. |
| public static List | Returns: aList<Process>es started from the corresponding
ProcessBuildera List of ProcessBuilders builders)Starts a Process for each ProcessBuilder, creating a pipeline of processes linked by their standard output and standard input streams. |