Трубы не могут переполниться. Канал - это просто буфер (определенный объем памяти, скорее всего, 64 КБ в текущей системе) между производителем и потребителем. Если производитель производит быстрее, чем потребляет потребитель, производитель блокируется (это означает, что программа будет находиться в спящем режиме), пока потребитель снова не освободит место в буфере, читая из него.
Кроме того, случай, который вы описываете, технически не труба. Если мы говорим о POSIX sh
, перенаправление в файл (acommand > afile
) превращает стандартный вывод команды непосредственно в файл. Труба включает в себя |
символ, по совпадению также называемый "труба", и является связующим звеном между двумя запущенными программами: acommand | anothercommand
.
(Но опять же, то, что действительно происходит за кулисами, это другая история: например, в /dev есть много файлов псевдоустройств, которые фактически перенаправляют на запущенные процессы. Например, echo Hello World > /dev/pts/1
может записывать в ваш текущий xterm)