Notamos uma mudança nos pipes nomeados após uma atualização do kernel do Linux. Usando os scripts dehttp://www.linuxjournal.com/content/using-named-pipes-fifos-bash, conseguimos replicar o problema. Os scripts funcionam
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
mas espere
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
Parece haver uma diferença na forma como os pipes nomeados funcionam. Isso é intencional ou não?
Capturamos os dois scripts como 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"
e 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
Existe uma solução?
EDITAR:
Estamos executando cada script em seu próprio terminal. Eles travam no sentido de que o script do escritor nunca existe e o script do leitor nunca mostra a saída normal "Olá de...". Estamos executando-os de maneira idêntica em ambas as versões do kernel, portanto não é um problema executar um script mais de uma vez ou qualquer outra diferença de procedimento.
Responder1
Não tenho reputação suficiente para escrever comentários, então escrevo como resposta.
O que você quer dizer com pendurar? O que acontece quando você executa pipe_reader.sh
e pipe_writer.sh
em outro terminal?
Além disso, depois de executar os dois scripts, o que comanda:
ls -al /proc/$(pgrep pipe_reader.sh)/fd
mostrar?
Talvez você tenha executado vários scripts .pipe_reader, então apenas o primeiro recebe a saída pipe_writer? Certifique-se de que
ps aux | grep pipe_reader | grep -v grep | wc -l
retorna 1
Responder2
Pelo que entendi, 3.13.0-55 e 3.13.0-65 são o mesmo kernel (3.13) com algumas correções/patches do provedor de distribuição. É improvável que a funcionalidade do pipe seja alterada com esta atualização. Acredito que quebrar tal funcionalidade seria desaprovado pelos desenvolvedores do kernel.
Há algo mais acontecendo.