GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wartebefehl in Linux mit Beispielen

Wait ist ein Shell-Befehl, der auf den Abschluss eines bestimmten Prozesses wartet und dann seinen Beendigungsstatus zurückgibt. Der Wait-Befehl wird verwendet, um entweder auf eine bestimmte Prozess-ID oder eine Job-ID zu warten und ihren Beendigungsstatus zurückzugeben.

Beim Ausführen des großen Automatisierungsflusses müssen wir einige Module so einstellen, dass sie warten sollten, bis der vorherige Satz von Modulen abgeschlossen ist, und Daten zurückgeben, die in die nächsten Module geleitet werden. In diesem Fall können wir den Befehl Wait verwenden, bis das vorherige Modul abgeschlossen ist.

Wie der Wartebefehl funktioniert

Wartebefehl, der verwendet wird, um den vorherigen Prozess zu überwachen, hängt vom Rückgabestatus des vorherigen Prozesses ab und gibt den Beendigungsstatus zurück. Wenn wir zum Beispiel warten wollen, bis ein bestimmter Prozess mit der ID 13245 abgeschlossen ist, dann sollten wir „wait 13245“ verwenden, wenn der Prozess 13245 den Wartebefehl abschließt und die Rückgabewerte des Exit-Status 13245 zurückgibt.

- Warte-PID (PID - Prozess-ID eines Befehls, auf dessen Beendigung das Dienstprogramm warten soll).
- Warte-JID (JID - Job-ID, die einen Hintergrundprozess identifiziert, auf den gewartet werden soll, anwendbar nur für Aufrufe von Warte in der aktuellen Shell-Ausführungsumgebung).

Der Ausgangsstatuswert des Wartebefehls hängt von der letzten angegebenen PID/JID ab. Wenn ein Prozess abnormal beendet wird, ist der Exit-Status größer als 128.

Wait-Befehl wird mit dem Wert 0 beendet wenn es ohne untergeordneten Prozess aufruft und alle Prozess-IDs bekannt sind, wurde die aktuelle Shell beendet. Wenn der Wartebefehl einen Fehler erkennt, gibt er einen beliebigen Wert von 1 bis 126 zurück. Wenn die letzte Prozess-ID unbekannt ist, wird der Wartebefehl mit dem Wert 127 beendet.

Warten-Befehlsbeispiele

Sehen wir uns ein paar Skripte an, um zu verstehen, wie der Wait-Befehl funktioniert.

Beispiel:1 – Skript mit Wait-Befehl

Wir haben zwei Skripte namens „foo.sh“ und „bar.sh“. Das Skript „Foo.sh“ gibt Zahlen zwischen 1 und 5 aus, und das Skript „bar.sh“ ruft foo.sh auf und führt es im Hintergrund aus, ruft die PID von foo.sh ab und wartet, bis es abgeschlossen ist, sobald es abgeschlossen ist 'bar.sh'-Schleife starten und abschließen.

Skript – foo.sh

#!/bin/bash
for i in 1 2 3 4 5
do
      echo “foo.sh – Looping … number $i”
done

Skript – bar.sh

#!/bin/bash
echo “Started bar.sh”
echo “Started foo.sh”
./foo.sh &
pid=$!
wait $pid
echo “Completed foo.sh”

for I in 1 2 3 4 5
do
        echo “bar.sh – Looping … number $i”
done

Ergebnis

Started bar.sh
Started foo.sh
foo.sh – Looping .. number 1
foo.sh – Looping .. number 2
foo.sh – Looping .. number 3
foo.sh – Looping .. number 4
foo.sh – Looping .. number 5
Completed foo.sh
bar.sh – Looping .. number 1
bar.sh – Looping .. number 2
bar.sh – Looping .. number 3
bar.sh – Looping .. number 4
bar.sh – Looping .. number 5
Completed bar.sh
$

Beispiel 2 – Skript ohne Wartebefehl

Wir haben zwei Skripte namens „foo.sh“ und „bar.sh“. Das 'foo.sh'-Skript gibt Zahlen zwischen 1 und 5 aus und das bar.sh-Skript ruft foo.sh auf und führt es im Hintergrund aus, aber es wird nicht warten, bis foo.sh beide Skripte beendet und ausgeführt hat.

Skript – foo.sh

#!/bin/bash
for i in 1 2 3 4 5
do
      echo “foo.sh – Looping … number $i”
done

Skript – bar.sh

#!/bin/bash
echo “Started bar.sh”
echo “Started foo.sh”
./foo.sh &
echo “Completed foo.sh”

for I in 1 2 3 4 5
do
        echo “bar.sh – Looping … number $i”
done

Ergebnis

Started bar.sh
Started foo.sh
Completed foo.sh
bar.sh – Looping .. number 1
bar.sh – Looping .. number 2
bar.sh – Looping .. number 3
bar.sh – Looping .. number 4
bar.sh – Looping .. number 5
Completed bar.sh
$
foo.sh – Looping .. number 1
foo.sh – Looping .. number 2
foo.sh – Looping .. number 3
foo.sh – Looping .. number 4
foo.sh – Looping .. number 5
$

Beispiel:3 – Skript mit Wartebefehl &Rückgabestatus

Das Skript „bar.sh“ ruft foo.sh auf und führt es im Hintergrund aus, ruft die PID von foo.sh ab und wartet, bis es abgeschlossen ist. Sobald es abgeschlossen ist, wird es die bar.sh-Schleife starten und abschließen. Schließlich gibt es die zurück Exit-Code des foo.sh-Skripts.

Skript – foo.sh (Ausgangsstatus =0)

Skript - foo.sh

#!/bin/bash
for i in 1 2 3 4 5
do
      echo “foo.sh – Looping … number $i”
done

Skript – bar.sh

#!/bin/bash
./foo.sh &
BPID=$!
wait $BPID
stat=$?

if [ $stat –eq 0 ]
then
       echo “Exit status - $stat”
else
        echo “Exit status - $stat”
fi

Ergebnis

foo.sh – Looping .. number 1
foo.sh – Looping .. number 2
foo.sh – Looping .. number 3
foo.sh – Looping .. number 4
foo.sh – Looping .. number 5
Exit status - 0
$

Skript – foo.sh (Ausgangsstatus =NON Zero)

Skript - foo.sh

#!/bin/bash
for i in 1 2 3 4 5
do
      iiecho “foo.sh – Looping … number $i”
done

Skript – bar.sh

#!/bin/bash
./foo.sh &
BPID=$!
wait $BPID
stat=$?

if [ $stat –eq 0 ]
then
       echo “Exit status - $stat”
else
        echo “Exit status - $stat”
fi

Ergebnis

./foo.sh: line 4: iiecho: command not found
./foo.sh: line 4: iiecho: command not found
./foo.sh: line 4: iiecho: command not found
./foo.sh: line 4: iiecho: command not found
./foo.sh: line 4: iiecho: command not found
Exit status – 127
$

Schlussfolgerung

Wait und Sleep sind beide zeitbasierte Systemaufrufe im Betriebssystem. Sehen wir uns den Unterschied zwischen Wait- und Sleep-Befehlen an.

Warten:Wenn der Benutzer den aktuellen Prozess anhalten möchte und alle vom Prozess gehaltenen Ressourcen freigibt und auf die Ausführung eines anderen Prozesses wartet. Wir müssen Benachrichtigung verwenden, um diesen Prozess darauf aufmerksam zu machen, dass die Ausführung nach Abschluss eines anderen Prozesses erneut gestartet wird.

Sleep:Dieser Systemaufruf wird verwendet, wenn der Benutzer den aktuellen Prozess für einige Zeit anhalten möchte. Es hält die Sperren auf Ressourcen, bis die Ruhezeit vorbei ist, und beginnt erneut mit der Ausführung des Prozesses. Hier hat der Prozess die Kontrolle über die gesamte Ausführung. zB Ich habe einen Befehl auf Bash ausgeführt und möchte einige Zeit schlafen, da ich eine Ausgabe des ausgeführten Befehls erwartet habe, die für die weitere Ausführung des aktuellen Prozesses verwendet wird.


Linux
  1. wc Linux-Befehl mit Beispielen

  2. Linux-Sortierungsbefehl mit Beispielen

  3. Linux Tee-Befehl mit Beispielen

  4. Linux-Kopfbefehl mit Beispielen

  5. JQ-Befehl in Linux mit Beispielen

Linux-CD-Befehl mit Beispielen

Linux-Uhrbefehl mit Beispielen

Wait-Befehl in Linux anhand von Beispielen erklärt

Linux-Exportbefehl mit Beispielen

Linux-IP-Befehl mit Beispielen

Wait-Befehl in Linux mit praktischen Beispielen erklärt