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.sh
y pipe_writer.sh
en 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.