Он создает один для стандартного ввода и один для стандартного вывода , точно так же конвейеры к подпроцессам всегда работают. Вот почему вы получаете два fd в массиве . Один конец каждого канала находится в родительском (как FD в массиве ), а один конец каждого канала находится в дочернем (как fd 0 и fd 1, stdin и stdout ). Запись в fd 1 дочернего элемента дает вам что-то для чтения из COPROC[0]
и наоборот -для стандартного ввода.
Эта настройка также описана на странице руководства в абзаце после процитированного вами. Ничего особенного не происходит, и он делает то же самое , используя стандартную pipe
функцию во всех системах, независимо от того, как работают локальные каналы помимо того, что обеспечивает POSIX.
initramfs содержит модули ядра; поэтому, если что-то изменилось в модулях, включенных в ваш initramfs, вам нужно сгенерировать новый.
Кроме этого, для той же версии ядра нет, вам не нужно генерировать новый файл initramfs, если он у вас уже есть.