닫기 지금은 내가 그것을 닫을 것인지명명 된 파일을 설명
exec {gui_outfd}<>$gui_outpipe
같은 이름의 파일 기술자를 생성 잘못된?
편집 내 스크립트에 줄 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는 매우 적절하다고 생각합니다 : FD 문제가 여전히 "$ GAME_BIN"프로세스에서 열려 있다고해도 쉘에서 읽으려는 쉘에서 아직 열려 있다는 것을 의미하지는 않습니다. –