A atualização do kernel Linux quebrou pipes nomeados

A atualização do kernel Linux quebrou pipes nomeados

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.she pipe_writer.shem 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.

informação relacionada