У меня есть такая программа:
cat | cat << EOF
some content
EOF
После того, как я нажму «EOF» и войду, второй кот отобразит "some content\n"
на моем терминале, я ps aux и обнаружил, что второй кот вышел. Но первый кот заблокирован и не выходит.
Strace показывает, что первый кот заблокирован read(0,
, если я нажму еще один ввод (второй ввод), read
первого кота вернется (получил "\n") и попытается напечатать "\n" в конвейер и столкнется с sigpipe.
Моя проблема в том, почему первый кот заблокирован? Или почему контент... EOF не дает первому коту конец файла?
Другая проблема заключается в том, что, поскольку первая кошка не закрыла свой fd/1 (stdout), почему вторая кошка выходит?