"Unterbrochener Systemaufruf" Fehler beim Töten von KindernprozessLinux

Linux verstehen
Anonymous
 "Unterbrochener Systemaufruf" Fehler beim Töten von Kindernprozess

Post by Anonymous »

Ich habe das folgende Shell-Skript: < /p>

Code: Select all

#!/usr/bin/env sh

PIPE_PATH="/tmp/mypipe"

test -p "${PIPE_PATH}" || mkfifo "${PIPE_PATH}"

processCommandsFromPipe() {
local pipe="${PIPE_PATH}"

while true; do
while read command; do
nohup setsid sh -c "${command}" >/dev/null 2>&1 &
commandPID=$!
echo "PID: ${commandPID}"
sleep 1
done < "${pipe}"

if [ ! -p "${pipe}" ]; then
exit 0
fi
done
}

processCommandsFromPipe &
PIPE_PROCESS=$!

cleanup() {
echo CLEANUP
trap - EXIT
if kill -0 "${PIPE_PROCESS}" >/dev/null 2>&1; then
kill "${PIPE_PROCESS}"
fi
rm -f "${PIPE_PATH}"
exit
}

read

cleanup
< /code>
Es öffnet ein Rohr, liest daraus und erzeugt einen Hintergrundvorgang des Befehls, der darauf geschrieben wird. Ein Befehl an die Pipe in einer anderen Schale: < /p>
echo "cat /dev/zero" > /tmp/mypipe
< /code>
Das Skript gibt die PID korrekt aus: < /p>
PID: 95522
< /code>
Dann töte ich den Prozess ab: < /p>
kill 95522
< /code>
Und jetzt zeigt mein Skript einen Fehler an: < /p>
bin/test.sh: line 11: can't open /tmp/mypipe: Interrupted system call
< /code>
Das Skript wird jedoch normal fortgesetzt. Ich kann immer noch andere Befehle in die Pfeife schreiben und sie werden korrekt hervorgebracht. < /P>
Kann jemand erklären, warum diese Nachricht angezeigt wird? Ich habe die Pfeife nicht berührt, ich habe gerade den hervorgebrachten Subprozess getötet. Nach meinem Verständnis sollte die Schleife nicht davon betroffen sein.
Wie kann ich die Nachricht loswerden? Code> übrigens. Wenn ich das Skript mit Bash 
ausführe, wird der Fehler nicht angezeigt.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post