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:

    coproc name non-simple command  Start a named coprocess

    coproc command args             Start 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 1          Start a named coprocess
> read aline ; echo $aline)        in the background
[1] 5090
$ echo ${testproc[@]}              Show the file descriptors
63 60
$ echo $testproc_PID               Show the coprocess PID
5090
$ read out <&${testproc[0]}        Read the first line of coprocess
$ echo $out                        output 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 $out2                       Show the second output line
foo
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.21.76.0