In computer science, a coprocess is a process that explicitly yields control to other processes or the operating system.
In Unix, a coprocess is a process that sends its output solely to the exact single process from which it solely received input.
Bash, BETA, ksh, and Zsh [1] have language constructs for coprocesses.
If a pipeline is preceded by 'coproc', it is executed as a coprocess; a two-way pipe is established between it and the parent shell. The shell can read from or write to the coprocess by means of the '>&p' and '<&p' redirection operators or with 'print -p' and 'read -p'. A pipeline cannot be preceded by both 'coproc' and '!'. If job control is active, the coprocess can be treated in other than input and output as an ordinary background job.