Ответ 1
После base64
выводит 10 байт, head
получает достаточное количество входов и выходов. Когда первый пытается вывести больше байтов, он получит сигнал SIGPIPE и, следовательно, выйдет тоже. По той же причине cat
выйдет из очереди.
Это команда, предназначенная для генерации 10 символов в случайном порядке:
cat /dev/urandom | base64 | head -c 10
Мой вопрос cat /dev/urandom | base64
- бесконечный поток вывода, который не остановится сам по себе. Но почему добавление head -c 10
завершает работу всей трубы? Я предполагаю, что cat
, base64
и head
являются 3 отдельными процессами, как head
завершает cat
?
После base64
выводит 10 байт, head
получает достаточное количество входов и выходов. Когда первый пытается вывести больше байтов, он получит сигнал SIGPIPE и, следовательно, выйдет тоже. По той же причине cat
выйдет из очереди.
head
закрывает входной файл после прочтения требуемой суммы. когда труба закрыта с одной стороны, другая сторона получает ошибки записи; это приводит к закрытию base64
, что в свою очередь вызывает закрытие cat
.
Трубопровод работает путем соединения выхода одного процесса A с входом B. Соединение может быть нарушено, когда
Поскольку эти два случая настолько распространены, обработка была перенесена в стандартную библиотеку C.