PS
Списки Bash Bash в качестве процесса работы, поскольку процесс Bash заблокирован, пытаясь открыть FIFO / TMP / in2
перед нерестом CAT
команда. С Bash
отвечает за обработку вашего перенаправления (> / TMP / in2
), он должен сначала открыть / TMP / in2
, чтобы он мог позже использовать DUP2
Системный вызов для изменения команды
команды CAT
в дескриптор файла для / TMP / in2
. К сожалению, звонок на открыть
блокируется в этом случае.
Если вы должны были запустить команду внутри STRACE:
strace -f bash -c "cat /tmp/out1 > /tmp/in2"
Вы бы увидели, что она остановится на:
[pid 18457] open("/tmp/in2", O_WRONLY|O_CREAT|O_TRUNC, 0666
он заблокирован, пока другой процесс не открывает файл для чтения. Согласно PIFO (7) PAGO (7) человек:
Ядро поддерживает ровно один объект трубы для каждого специального файла FIFO, который открывается по меньшей мере одним процессом. FIFO должен быть открыт на обоих концах (чтение и запись) до того, как данные могут быть переданы. Обычно, открывая блоки FIFO, пока не будет открыта другой конец.
Процесс может открыть FIFO в режиме неблокирования. В этом случае открытие только для чтения добится успеха, даже если никто не открыл на стороне записи, открытие только для записи будет выполнен только с Enxio (нет такого устройства или адреса), если только другой конец уже не открыт.
Если вы были открыты / TMP / in2
для чтения сначала (скажем, добавив CAT / TMP / in2 &
перед командой Final Cat), вы увидите ваш финал Команда CAT
отображается в вашем дереве процесса.