La actualización del kernel de Linux rompió las canalizaciones con nombre

La actualización del kernel de Linux rompió las canalizaciones con nombre

Notamos un cambio en las canalizaciones con nombre después de una actualización del kernel de Linux. Usando los guiones dehttp://www.linuxjournal.com/content/using-named-pipes-fifos-bash, pudimos replicar el problema. Los guiones funcionan

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

pero espera

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 haber una diferencia en cómo funcionan las canalizaciones con nombre. ¿Es eso intencional o no?

Capturamos los dos 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"

y 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

¿Hay alguna solución?

EDITAR:

Estamos ejecutando cada script en su propia terminal. Se bloquean en el sentido de que el guión del escritor nunca existe y el guión del lector nunca muestra la salida normal "Hola desde...". Los ejecutamos de manera idéntica en ambas versiones del kernel, por lo que no es un problema de ejecutar un script más de una vez ni ninguna otra diferencia de procedimiento.

Respuesta1

No tengo suficiente reputación para escribir comentarios, así que escribo como respuesta.

¿A qué te refieres con colgar? ¿Qué pasa que ejecutas pipe_reader.shy pipe_writer.shen otra terminal?

Además, después de ejecutar ambos scripts, qué comando:

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

¿espectáculo?

¿Quizás haya ejecutado varios scripts .pipe_reader, por lo que solo el primero recibe la salida pipe_writer? Asegúrate de eso

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

devuelve 1

Respuesta2

Por lo que tengo entendido, 3.13.0-55 y 3.13.0-65 ​​son el mismo núcleo (3.13) con algunas correcciones/parches del proveedor de distribución. Es poco probable que la funcionalidad de la tubería se modifique con esta actualización. Creo que romper dicha funcionalidad sería mal visto por los desarrolladores del kernel.

Algo más está pasando.

información relacionada