The pipeline program

Interface

It runs prog1... as a child process and execs into
prog2..., with a pipe between prog1's stdout and
prog2's stdin.

prog1's pid is available in prog2 as the !
environment variable.

Options

-d : run prog1...
as a grandchild of pipeline. This is meant to prevent a zombie
from hanging around if prog2... fails to wait for its children.

-r : make prog1... the writer and
prog2... the reader. This is the default.

-w : make prog1... the reader and
prog2... the writer.

Notes

You can easily create a chain of pipes: pipeline a "" pipeline b "" c
is roughly equivalent to
sh -c 'exec a | b | c', except that shells usually run c
as a child process like a and b, and exec has no
effect.