Конвейер (pipe)
Односторонний поток байтов между двумя процессами — то, что делает возможным символ | в оболочке.
Ядро создаёт буфер, выдаёт одному процессу файловый дескриптор для записи, другому — для чтения. Пишущий блокируется, когда буфер полон, читающий — когда он пуст; управление потоком получается бесплатно. Буфер на Linux обычно равен 64 КБ.
На этом механизме стоит философия Unix: маленькие программы, делающие одно дело, соединённые текстовыми потоками. Именованный канал, создаваемый через mkfifo, живёт в файловой системе и позволяет соединить посторонние процессы. Частое явление — SIGPIPE: запись в канал, читатель которого ушёл, по умолчанию убивает процесс; поэтому head «затыкает» команды, выдающие слишком много.