Linux 커널 업그레이드에서 명명된 파이프가 끊어졌습니다.

Linux 커널 업그레이드에서 명명된 파이프가 끊어졌습니다.

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)입니다. 이번 업그레이드로 파이프 기능이 변경될 가능성은 거의 없습니다. 나는 그러한 기능을 깨뜨리는 것이 커널 개발자들에 의해 눈살을 찌푸리게 될 것이라고 믿습니다.

또 다른 일이 일어나고 있습니다.

관련 정보