edu.rice.cs.util
Class ProcessChain

java.lang.Object
  extended by java.lang.Process
      extended by edu.rice.cs.util.ProcessChain

public class ProcessChain
extends Process

This class represents a piping chain of processes, in which the output of the first process is piped into the input of the second process, and so on. The class allows the entire chain to be treated as if it were just one process. The constructor also sets up the input and output streams of the individual processes so they can function as a chain.


Nested Class Summary
protected  class ProcessChain.ProcessChainThreadGroup
          Thread group for all threads that deal with this process sequence.
 
Field Summary
protected  boolean _aborted
          True when execution of this chain has been aborted.
protected  PipedInputStream _combinedErrorStream
          The combined error stream of all processes.
protected  JoinInputStream _combinedInputJoinedWithDebugStream
          The combined input stream of all the processes, plus a debug stream.
protected  PipedInputStream _combinedInputStream
          The combined input stream of all processes.
protected  PipedOutputStream _combinedStdErrStream
          The stream into which all outputs to stderr are written.
protected  PipedOutputStream _combinedStdOutStream
          The stream into which all outputs to stdout are written.
protected  ProcessCreator[] _creators
          The process creators that create the processes in this process chain.
protected  PipedInputStream _debugInputStream
          Debug input and output stream.
protected  PrintWriter _debugOutput
          Debug output that gets joined with the streams from the processes.
protected  PipedOutputStream _debugOutputStream
           
protected  Process[] _processes
          The processes inside this piping chain.
protected  Set<StreamRedirectThread> _redirectors
          The redirector threads that move output (both stdout and stderr) from one process to the input of the next process.
static String PIPE_SEPARATOR
          Separator used between processes inside the same process chain.
static char PIPE_SEPARATOR_CHAR
          Separator used between processes inside the same process chain.
static String PROCESS_SEPARATOR
          Separator used between different process chains.
static char PROCESS_SEPARATOR_CHAR
          Separator used between different process chains.
 
Constructor Summary
ProcessChain(ProcessCreator[] pcs)
          Constructor for a process chain consisting of the individual processes provided.
 
Method Summary
 void destroy()
          Kills all subprocesses.
 int exitValue()
          Returns the exit value for the subprocess.
 InputStream getErrorStream()
          Gets the error stream of the process sequence, i.e.
 InputStream getInputStream()
          Gets the input stream of the process sequence, i.e.
 OutputStream getOutputStream()
          Gets the output stream of the process sequence, i.e.
protected  void stopAllRedirectors()
          Set the stop flags for all redirector threads.
 int waitFor()
          Causes the current thread to wait, if necessary, until the process chain has terminated, i.e.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

PROCESS_SEPARATOR_CHAR

public static final char PROCESS_SEPARATOR_CHAR
Separator used between different process chains.

See Also:
Constant Field Values

PROCESS_SEPARATOR

public static final String PROCESS_SEPARATOR
Separator used between different process chains.


PIPE_SEPARATOR_CHAR

public static final char PIPE_SEPARATOR_CHAR
Separator used between processes inside the same process chain.

See Also:
Constant Field Values

PIPE_SEPARATOR

public static final String PIPE_SEPARATOR
Separator used between processes inside the same process chain.


_creators

protected ProcessCreator[] _creators
The process creators that create the processes in this process chain.


_processes

protected Process[] _processes
The processes inside this piping chain.


_aborted

protected boolean _aborted
True when execution of this chain has been aborted.


_redirectors

protected Set<StreamRedirectThread> _redirectors
The redirector threads that move output (both stdout and stderr) from one process to the input of the next process.


_combinedInputStream

protected PipedInputStream _combinedInputStream
The combined input stream of all processes.


_combinedStdOutStream

protected PipedOutputStream _combinedStdOutStream
The stream into which all outputs to stdout are written.


_combinedInputJoinedWithDebugStream

protected JoinInputStream _combinedInputJoinedWithDebugStream
The combined input stream of all the processes, plus a debug stream.


_debugOutput

protected PrintWriter _debugOutput
Debug output that gets joined with the streams from the processes.


_debugInputStream

protected PipedInputStream _debugInputStream
Debug input and output stream.


_debugOutputStream

protected PipedOutputStream _debugOutputStream

_combinedErrorStream

protected PipedInputStream _combinedErrorStream
The combined error stream of all processes.


_combinedStdErrStream

protected PipedOutputStream _combinedStdErrStream
The stream into which all outputs to stderr are written.

Constructor Detail

ProcessChain

public ProcessChain(ProcessCreator[] pcs)
Constructor for a process chain consisting of the individual processes provided.

Parameters:
pcs - array of ProcessCreators
Method Detail

getOutputStream

public OutputStream getOutputStream()
Gets the output stream of the process sequence, i.e. the combined output stream of all the processes in the sequence.

Specified by:
getOutputStream in class Process
Returns:
the output stream of the process sequence.

getErrorStream

public InputStream getErrorStream()
Gets the error stream of the process sequence, i.e. the combined error stream of all the processes in the sequence.

Specified by:
getErrorStream in class Process
Returns:
the error stream of the process sequence.

getInputStream

public InputStream getInputStream()
Gets the input stream of the process sequence, i.e. the combined input stream of all the processes in the sequence.

Specified by:
getInputStream in class Process
Returns:
the input stream of the process chain

waitFor

public int waitFor()
            throws InterruptedException
Causes the current thread to wait, if necessary, until the process chain has terminated, i.e. until all processes in the chain have terminated. This method returns immediately if all subprocesses have already terminated. If any of the subprocess has not yet terminated, the calling thread will be blocked until all subprocesses exit.

Specified by:
waitFor in class Process
Returns:
the exit value of the process chain, i.e. the exit code of the last process in the chain.
Throws:
InterruptedException - if the current thread is interrupted by another thread while it is waiting, then the wait is ended and an InterruptedException is thrown.

exitValue

public int exitValue()
Returns the exit value for the subprocess.

Specified by:
exitValue in class Process
Returns:
the exit value of the subprocess represented by this Process object. by convention, the value 0 indicates normal termination.
Throws:
IllegalThreadStateException - if the subprocess represented by this Process object has not yet terminated.

destroy

public void destroy()
Kills all subprocesses. The subprocesses represented by this ProcessChain object is forcibly terminated.

Specified by:
destroy in class Process

stopAllRedirectors

protected void stopAllRedirectors()
Set the stop flags for all redirector threads.