次のコードを使用します。
rm -f pipe
mkfifo pipe
foo () {
echo 1
sleep 1
echo 2
}
#1
exec 3< <(foo &)
cat <&3 # works
#2
foo >pipe &
cat <pipe # works
#3
exec 3<>pipe
foo >&3 &
cat <&3 # hangs
#4 -- update: this is the correct approach for what I want to do
foo >pipe &
exec 3<pipe
rm pipe
cat <&3 # works
アプローチ #3 がハングするのに、他のアプローチはハングしないのはなぜですか? アプローチ #3 をハングさせない方法はありますか?
理論的根拠: 準無名パイプを使用して、非同期で実行されているいくつかのサブプロセスを接続したいので、ファイル記述子がそれを指すようにした後、パイプを削除する必要があります。
mkfifo pipe
exec {fd}<>pipe
rm pipe
# use &$fd only