Sortof, конвейер работает так: сначала он выполняет первую команду, а затем вторую в вашем случае.
То есть, давайте дадим A|Bкоманду. Тогда нет уверенности в том Aили Bначинает первым. Они могут начаться в одно и то же время, если имеется несколько процессоров. Канал может содержать неопределенный, но конечный объем данных.
Если B пытается прочитать из канала, но данные недоступны, Bбудет ждать, пока данные не поступят. Если при Bчтении с диска Bможет возникнуть та же проблема, и нужно дождаться окончания чтения с диска. Более близкая аналогия - чтение с клавиатуры. Там Bнужно будет ждать, пока пользователь наберет. Но во всех этих случаях B запускает операцию «чтения» и должен дождаться ее завершения. Но если Bэто команда, для которой требуется только частичный вывод, Aто после определенного момента, когда Bуровень входного сигнала s достигнут A, SIGPIPE будет уничтожен
Если Aпопытка записи в канал и канал заполнен, Aнеобходимо дождаться освобождения некоторого места в канале. Aможет иметь такую же проблему, если он пишет в терминал. Терминал имеет управление потоком данных и может контролировать скорость передачи данных. В любом случае, Aон запустил операцию записи и будет ждать, пока операция записи не закончится.
Aи Bведут себя как сопроцессы, хотя не все сопроцессы будут взаимодействовать с каналом. Ни один из них не полностью контролирует другого.
-mаргумент.