A atualização do kernel do Linux quebrou pipes nomeados

1

Observamos uma mudança com pipes nomeados após uma atualização do kernel do Linux. Usando os scripts do link , conseguimos reproduzir o problema. Os scripts funcionam em

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 em como os pipes nomeados funcionam. Isso é intencional ou não?

Nós 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 correção?

EDITAR:

Estamos executando cada script em seu próprio terminal. Eles ficam no sentido de que o script do escritor nunca existe e o script do leitor nunca mostra a saída normal "Hello from ...". 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 quaisquer outras diferenças procedurais.

    
por Don Branson 06.10.2015 / 17:58

2 respostas

0

Não tenho reputação suficiente para escrever comentários, por isso escrevi como uma resposta.

O que você quer dizer com enforcar? O que acontece do que você executa pipe_reader.sh e pipe_writer.sh em outro terminal?

Além disso, depois de executar os dois scripts, o que o comando:

ls -al /proc/$(pgrep pipe_reader.sh)/fd

show?

Talvez você tenha executado vários scripts .pipe_reader, de modo que apenas o primeiro receba a saída pipe_writer? Certifique-se de que

ps aux | grep pipe_reader | grep -v grep | wc -l 

retorna 1

    
por 06.10.2015 / 18:15
0

Pelo que entendi, 3.13.0-55 e 3.13.0-65 são ambos o mesmo kernel (3.13) com algumas correções / correções pelo provedor de distribuição. É improvável que a funcionalidade de pipe seja alterada com essa atualização. Acredito que quebrar essa funcionalidade seria desaprovado pelos desenvolvedores do kernel.

Há algo mais acontecendo.

    
por 07.10.2015 / 01:39