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
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access