Linux 커널 업그레이드 후 명명된 파이프에 대한 변경 사항을 발견했습니다. 의 스크립트 사용http://www.linuxjournal.com/content/using-named-pipes-fifos-bash, 문제를 재현할 수 있었습니다. 스크립트는 다음에서 작동합니다.
Linux TEST05 3.13.0-55-generic #94-Ubuntu SMP Thu Jun 18 00:27:10 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
하지만 잠깐만요
Linux TEST01 3.13.0-65-generic #106-Ubuntu SMP Fri Oct 2 22:08:27 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
명명된 파이프가 작동하는 방식에 차이가 있는 것 같습니다. 의도한 걸까요, 아닌 걸까요?
두 스크립트를 Pipe_reader.sh로 캡처했습니다.
#!/bin/bash
pipe=/tmp/testpipe
trap "rm -f $pipe" EXIT
if [[ ! -p $pipe ]]; then
mkfifo $pipe
fi
while true
do
if read line <$pipe; then
if [[ "$line" == 'quit' ]]; then
break
fi
echo $line
fi
done
echo "Reader exiting"
그리고 Pipe_writer.sh:
#!/bin/bash
pipe=/tmp/testpipe
if [[ ! -p $pipe ]]; then
echo "Reader not running"
exit 1
fi
if [[ "$1" ]]; then
echo "$1" >$pipe
else
echo "Hello from $$" >$pipe
fi
해결책이 있나요?
편집하다:
우리는 각 스크립트를 자체 터미널에서 실행하고 있습니다. 이는 작성기 스크립트가 존재하지 않으며 판독기 스크립트가 일반적인 "Hello from..." 출력을 표시하지 않는다는 의미에서 중단됩니다. 두 커널 버전 모두에서 동일한 방식으로 실행하므로 하나의 스크립트를 두 번 이상 실행하는 문제나 다른 절차상의 차이가 없습니다.
답변1
댓글을 쓰기엔 평판이 부족해서 답변으로 씁니다.
행잉이란 무슨 뜻인가요? 다른 터미널에서 실행하는 것보다 무슨 일이 발생합니까 pipe_reader.sh
?pipe_writer.sh
또한 두 스크립트를 모두 실행한 후 명령은 무엇입니까?
ls -al /proc/$(pgrep pipe_reader.sh)/fd
보여주다?
어쩌면 여러 개의 .pipe_reader 스크립트를 실행했기 때문에 첫 번째 스크립트만 Pipe_writer 출력을 수신하게 되었을 수도 있습니다. 다음을 확인하세요.
ps aux | grep pipe_reader | grep -v grep | wc -l
1을 반환합니다.
답변2
내가 이해한 바로는 3.13.0-55와 3.13.0-65는 모두 배포 공급자가 일부 수정/패치를 적용한 동일한 커널(3.13)입니다. 이번 업그레이드로 파이프 기능이 변경될 가능성은 거의 없습니다. 나는 그러한 기능을 깨뜨리는 것이 커널 개발자들에 의해 눈살을 찌푸리게 될 것이라고 믿습니다.
또 다른 일이 일어나고 있습니다.