Beim Upgrade des Linux-Kernels kam es zu Problemen mit benannten Pipes

Beim Upgrade des Linux-Kernels kam es zu Problemen mit benannten Pipes

Wir haben eine Änderung bei Named Pipes nach einem Linux-Kernel-Upgrade festgestellt. Mit den Skripten vonhttp://www.linuxjournal.com/content/using-named-pipes-fifos-bashkonnten wir das Problem reproduzieren. Die Skripte funktionieren auf

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

aber warte

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

Es scheint einen Unterschied in der Funktionsweise benannter Pipes zu geben. Ist das beabsichtigt oder nicht?

Wir haben die beiden Skripte als pipe_reader.sh erfasst:

#!/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"

und 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

Gibt es eine Lösung?

BEARBEITEN:

Wir führen jedes Skript in seinem eigenen Terminal aus. Sie bleiben in dem Sinne hängen, dass das Schreibskript nie existiert und das Leseskript nie die normale Ausgabe „Hallo von ...“ anzeigt. Wir führen sie unter beiden Kernelversionen auf identische Weise aus, es gibt also kein Problem, ein Skript mehr als einmal auszuführen, oder andere Verfahrensunterschiede.

Antwort1

Mein Ruf ist nicht gut genug, um einen Kommentar zu verfassen, also schreibe ich eine Antwort.

Was meinst du mit „hängen bleiben“? Was passiert, wenn du es ausführst pipe_reader.shund pipe_writer.shin einem anderen Terminal?

Und was bewirkt der Befehl nach der Ausführung beider Skripte:

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

zeigen?

Vielleicht haben Sie mehrere .pipe_reader-Skripte ausgeführt, sodass nur das erste die Pipe_Writer-Ausgabe erhält? Stellen Sie sicher, dass

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

gibt 1 zurück

Antwort2

So wie ich es verstehe, handelt es sich bei 3.13.0-55 und 3.13.0-65 ​​um denselben Kernel (3.13) mit einigen Fixes/Patches des Distributionsanbieters. Es ist unwahrscheinlich, dass die Pipe-Funktionalität mit diesem Upgrade geändert wird. Ich glaube, dass Kernel-Entwickler es missbilligen würden, wenn diese Funktionalität nicht funktioniert.

Da ist noch etwas anderes los.

verwandte Informationen