Краткий ответ:
Избавьтесь от wait () для начинающих.
Но это еще не все.Не то чтобы я был экспертом, но из наблюдения за поведением bash я узнал, что все компоненты в конвейере выполняются одновременно параллельно
AFAIK, bash (или, возможно, реализация fifo в ядре) будет генерировать сигналык процессу, когда другой процесс на другой стороне трубы закрыл трубу.'base64 / dev / urandom' завершается, потому что он получил сигнал, когда голова закрылась, это стандартный вывод.
Как вы уже видели, base64 / dev / urandom никогда не заканчивается сам по себе.
В дальнейшем запускайте все процессы, создавая fifo с подключенными stdout и stdin.Я надеюсь, что это приведет вас в правильном направлении.Существует много дискуссий о том, как использовать fifo, так что, надеюсь, это толчок в правильном направлении.