ProcessBuilder.startPipeline(List) in Java

ProcessBuilder.startPipeline(List<ProcessBuilder>): This method is available in the java.lang.ProcessBuilder class of Java.

Syntax:

List<Process> java.lang.ProcessBuilder.startPipeline(List<ProcessBuilder> builders) throws IOException

This method takes one argument. This method starts a Process for each ProcessBuilder, creating a pipeline of processes linked by their standard output and standard input streams.

Parameters: One parameter is required for this method.

builders: a List of ProcessBuilders.

Returns: a List<Process> started from the corresponding ProcessBuilder.

Throws:

1. IllegalArgumentException - any of the redirects except the standard input of the first builder and the standard output of the last builder are not Redirect.PIPE.

2. NullPointerException - if an element of the command list is null or if an element of the ProcessBuilder list is null or the builders argument is null.

3. IndexOutOfBoundsException - if the command is an empty list.

4. SecurityException - if a security manager exists and

a). its checkExecmethod doesn't allow creation of the subprocess.

b). the standard input to the subprocess was redirected from a file and the security manager's checkRead method denies read access to the file.

c). the standard output or standard error of the subprocess was redirected to a file and the security manager's checkWrite method denies write access to the file.

5. UnsupportedOperationException - If the operating system does not support the creation of processes.

6. IOException - if an I/O error occurs.

Approach 1: When no exception

Java

package com.ProcessBuilder;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ProcessBuilderstartPipeline {
    public static void main(String[] args) throws IOException {

        ProcessBuilder processBuilder =
new ProcessBuilder("notepad.exe");

        ProcessBuilder processBuilder2 =
new ProcessBuilder("notepad.exe");

        List<ProcessBuilder> list =
new ArrayList<ProcessBuilder>();
        list.add(processBuilder);
        list.add(processBuilder2);

        System.out.println(ProcessBuilder.startPipeline(list));
    }
}

Output:

[Process[pid=8000, exitValue="not exited"], Process[pid=12080, exitValue="not exited"]]


Approach 2: NullPointerException 

Java

package com.ProcessBuilder;

import java.io.IOException;
import java.util.List;

public class ProcessBuilderstartPipeline {
    public static void main(String[] args) throws IOException {

        List<ProcessBuilder> list = null;

        System.out.println(ProcessBuilder.startPipeline(list));
    }
}

Output:

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.util.List.size()" because "builders" is null at java.base/java.lang.ProcessBuilder.startPipeline(ProcessBuilder.java:1272) at com.ProcessBuilder.ProcessBuilderstartPipeline.main(ProcessBuilderstartPipeline.java:11)


Approach 3: IOException 

Java

package com.ProcessBuilder;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ProcessBuilderstartPipeline {
    public static void main(String[] args) throws IOException {

        ProcessBuilder processBuilder =
new ProcessBuilder("notepad.exe");

        ProcessBuilder processBuilder2 =
new ProcessBuilder("hello.exe");

        List<ProcessBuilder> list =
new ArrayList<ProcessBuilder>();
        list.add(processBuilder);
        list.add(processBuilder2);

        System.out.println(ProcessBuilder.startPipeline(list));
    }
}

Output:

Exception in thread "main" java.io.IOException: Cannot run program "hello.exe": CreateProcess error=2, The system cannot find the file specified at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1142) at java.base/java.lang.ProcessBuilder.startPipeline(ProcessBuilder.java:1297) at com.ProcessBuilder.ProcessBuilderstartPipeline.main(ProcessBuilderstartPipeline.java:18) Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified at java.base/java.lang.ProcessImpl.create(Native Method) at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:483) at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158) at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1109) ... 2 more


Some methods of ProcessBuilder class

ProcessBuilder.ProcessBuilder(String...)This method constructs a process builder with the specified operating system program and arguments.

ProcessBuilder.ProcessBuilder(List<String>)This method constructs a process builder with the specified operating system program and arguments.

command()This method returns this process builder's operating system program and arguments.

command(List<String>)This method sets this process builder's operating system program and arguments.

command(String...)This method sets this process builder's operating system program and arguments. 

directory()This method returns this process builder's working directory.

directory(File)This method sets this process builder's working directory.

environment()This method returns a string map view of this process builder's environment.

inheritIO()This method sets the source and destination for subprocess standard I/O to be the same as those of the current Java process.

redirectError()This method returns this process builder's standard error destination.

redirectError(File)This method sets this process builder's standard error destination to a file.

redirectError(Redirect)This method sets this process builder's standard error destination.

redirectErrorStream()This method tells whether this process builder merges standard error and standard output.

redirectErrorStream(boolean)This method sets this process builder's redirectErrorStream property.

redirectInput()This method returns this process builder's standard input source.

redirectInput(File)This method sets this process builder's standard input source to a file.

redirectInput(Redirect)This method sets this process builder's standard input source.

redirectOutput()This method returns this process builder's standard output destination.

redirectOutput(File)This method sets this process builder's standard output destination to a file.

redirectOutput(Redirect)This method sets this process builder's standard output destination.

start()This method starts a new process using the attributes of this process builder.

ProcessBuilder.startPipeline(List<ProcessBuilder>)his method starts a Process for each ProcessBuilder, creating a pipeline of processes linked by their standard output and standard input streams.

No comments:

Post a Comment