Coprocesses
A coprocess is a process that runs in parallel with the shell and with which the shell can communicate. The shell starts the process in the background, connecting its standard input and output to a two-way pipe. There are two syntaxes for running a coprocess:
coprocname non-simple commandStart a named coprocess coproccommand argsStart an unnamed coprocess
The shell creates an array variable named name
to hold the file descriptors for communication with the coprocess.
name[0] is the output of the
coprocess (input to the controlling shell) and
name[1] is the input to the
coprocess (output from the shell). In addition, the variable
name_PID holds the
process-ID of the coprocess. When no name is supplied, the shell uses
COPROC.
Caution
As of version 4.1, there can be only one active coprocess at a time.
Example
The following example demonstrates the basic usage of the
coproc keyword and the related variables:
$coproc testproc (echo 1Start a named coprocess >read aline ; echo $aline)in the background [1] 5090 $echo ${testproc[@]}Show the file descriptors 63 60 $echo $testproc_PIDShow the coprocess PID 5090 $read out <&${testproc[0]}Read the first line of coprocess $echo $outoutput and show it 1 $echo foo >&${testproc[1]}Send coprocess some input $read out2 <&${testproc[0]}Read second output line [1]+ Done coproc testproc (echo 1; read aline; echo $aline) $echo $out2Show the second output line foo