を閉じる私は今、私はそれを閉じたいというという名前のファイルに記述
exec {gui_outfd}<>$gui_outpipe
のような名前のファイルディスクリプタを作成しました違う?
EDIT私のスクリプトの行330から357:
run_gui & gui_pid=$!
run_ai1 & ai1_pid=$!
exec {gui_outfd}>&-
while true; do
echo "Started the loop"
while true; do
eval $(isalive2 $gui_pid $ai1_pid)
read -u $ai1_outfd line || echo "Nothing read"
if [[ $line ]]; then # line 338
echo "Piping to GUI $line"
echo "$line" >&$gui_infd
if [[ "$line" == "END_TURN" ]]; then
break
fi
fi
done
echo TURNCHANGED
while true; do
read -u $gui_outfd line || echo "nothing read"
if [[ $line ]]; then
echo "Piping to AI $line"
echo "$line" >&$ai1_infd
if [[ "$line" == "END_TURN" ]]; then
break
fi
fi
done
done
と呼ばれる機能:
run_gui()
{
exec "$GAME_BIN" $args <&$gui_infd >&$gui_outfd
}
run_ai1()
{
exec "$ai1" <&$ai1_infd >&$ai1_outfd
}
プロセスは、クローズ自体の問題ではなく、クローズ後にディスクリプタから読み取ろうとしているようです。 – chepner
@chepner \t はい、しかし、それはサブシェルであるため、ファイル記述子は 'run_gui'サブプロセスによってまだ開いているはずです...更新されたOP – marmistrz
を参照してください。しかし、@chepnerは正しいと思われます:問題の "$ GAME_BIN"プロセスでまだ開いていても、それを読み込もうとしているシェルでまだ開いているというわけではありません。 –