bash pipe - если первый исполняемый файл завершится, выйдут ли все последующие исполняемые файлы?

Если у меня есть произвольное количество труб источников и раковин

exec1 | exec2 | exec3 | ...

ВОПРОС

  1. Тогда, если execN завершится, все execM нисходящем направлении (M> N) также execM ?
  2. Что будет с теми, кто вверх по течению (M <N)?

Всего 1 ответ


Последующие процессы не обязательно завершатся. Когда execN выходит, он закрывает конец записи канала, который закрывает конец execN+1 стандартного ввода execN+1 . Но пока execN+1 попытается прочитать из стандартного ввода, он не заметит, и даже тогда он просто обнаружит, что достиг конца файла; он может продолжать делать другие вещи или выйти, как он решит.

В execN-1 не заметит, что execN вышел и закрыл свой конец чтения канала до execN-1 пор, пока execN-1 попытается выполнить запись в свой конец канала, после чего он получит сигнал SIGPIPE. Обработчик по умолчанию для этого сигнала - выход, но execN-1 может установить свой собственный обработчик, чтобы решить, когда и когда возникнет такая ситуация.


Есть идеи?

10000