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

Bash-Warten-Befehl mit Beispielen

Einführung

Die Bash wait command ist ein Shell-Befehl, der darauf wartet, dass im Hintergrund laufende Prozesse abgeschlossen werden, und den Beendigungsstatus zurückgibt. Im Gegensatz zum sleep-Befehl, der eine bestimmte Zeit wartet, ist der wait wartet darauf, dass alle oder bestimmte Hintergrundaufgaben beendet werden.

Dieses Tutorial erklärt das wait Befehlssyntax und bietet Beispiele für Bash-Skriptcodes.

Voraussetzungen

  • Zugriff auf die Befehlszeile/das Terminal.
  • Administratorrechte (sudo).
  • Ein Texteditor wie Vim oder Nano.

bash wait-Befehlssyntax

Es gibt verschiedene Möglichkeiten, das Warten zu verwenden Befehl in Bash-Skripten. Die folgende Tabelle erläutert jeden Anwendungsfall.

-Befehl Erläuterung
wait Ohne Parameter wird wait Der Befehl wartet, bis alle Hintergrundprozesse beendet sind, bevor er mit dem Skript fortfährt.
wait <process or job ID> Eine hinzugefügte PID oder Job-ID wartet auf das Ende eines bestimmten Prozesses, bevor das Skript fortgesetzt wird.
wait -n Wartet nur auf den Abschluss des folgenden Hintergrundprozesses und gibt einen Exit-Status zurück.
wait -f Beim Beenden eines Programms wird zuerst gewartet, bis die Hintergrundaufgabe beendet ist, bevor es beendet wird.

Warten-Befehlsbeispiele

Beim Arbeiten mit wait sind drei zusätzliche Parameter zu beachten in Bash-Skripten:

1. Das kaufmännische Und-Zeichen (& ) nach einem Befehl weist auf einen Hintergrundjob hin.

2. $! holt die PID des letzten Hintergrundprozesses. Speichern Sie die vorherige PID in einer Variablen, wenn Sie mit mehreren Hintergrundprozessen arbeiten.

3. $? druckt den Exit-Status des letzten Prozesses.

Um zu sehen, wie diese drei Parameter zusammenarbeiten, öffnen Sie ein Terminalfenster und führen Sie Folgendes aus:

sleep 10 &
echo $!
echo $?

Der $! Parameter speichert die PID des Hintergrundprozesses, während $? speichert den Exit-Status. Der Exit-Status 0 zeigt an, dass der Befehl erfolgreich abgeschlossen wurde.

Einzelprozess-Wartebeispiel

1. Öffnen Sie zunächst das Terminal und erstellen Sie einen einfachen Hintergrundprozess:

sleep 10 &

2. Bestätigen Sie, dass der Job im Hintergrund läuft mit:

jobs -l

3. Verwenden Sie wait Befehl ohne Parameter zum Anhalten bis zum Abschluss des Prozesses:

wait

Das Terminal wartet darauf, dass der Hintergrundprozess beendet wird.

Nach 10 Sekunden (aufgrund von sleep 10 ), gibt die Konsole ein Fertig aus Nachricht.

Einzelprozess-Bash-Wartebeispiel

Verwenden Sie das wait Befehl, um anzugeben, bis zu welchem ​​Punkt ein Hintergrundprozess innerhalb eines Skripts ausgeführt werden muss.

1. Fügen Sie beispielsweise den folgenden Code in einem Texteditor hinzu:

#!/bin/bash
echo Background process &
echo First message
echo Second message
wait
echo Third message

Wenn der Hintergrundprozess den ersten und zweiten Prozess nicht beendet, wird wait Befehl ruft eine Pause auf, um zu warten, bis der Hintergrundprozess nach dem zweiten Prozess abgeschlossen ist, bevor mit dem dritten Prozess fortgefahren wird.

2. Speichern Sie das Skript als single_process.sh . Ändern Sie im Terminal die Berechtigungen, um das Skript ausführbar zu machen:

sudo chmod +x single_process.sh

3. Führen Sie das Skript aus mit:

./single_process.sh

Der Hintergrundprozess wird jederzeit vor dem wait abgeschlossen Befehl, und das Skript wird fortgesetzt.

Mehrere Prozesse warten Beispiel

1. Öffnen Sie den Texteditor und fügen Sie das folgende Skript mit mehreren Prozessen hinzu:

#!/bin/bash
sleep 10 &
sleep 15 &
sleep 5 &
echo $(date +%T)
wait 
echo $(date +%T)

Das Skript gibt die aktuelle Uhrzeit vor und nach wait aus Befehl. Ohne Parameter wartet das Programm, bis alle Prozesse abgeschlossen sind.

2. Speichern Sie das Skript als test.sh und schließen Sie die Datei. Als nächstes machen Sie das Skript ausführbar:

sudo chmod +x test.sh

3. Zuletzt führen Sie das Programm mit:

aus
./test.sh

Da die Prozesse im Hintergrund laufen, sind alle drei in fünfzehn Sekunden abgeschlossen.

4. Verwenden Sie dasselbe Skript, um die folgenden Anwendungsfälle zu testen:

  • Fügen Sie -n hinzu Parameter auf <strong>wait</strong> . Nur der schnellste Prozess wird abgeschlossen und das Skript endet in zehn Sekunden.
  • Fügen Sie die Job-ID hinzu, um anzugeben, auf welchen Job das Skript warten soll. Beispiel:wait %1 Pausen für Prozess 1 (sleep 10 ) abzuschließen.

Mehrere Prozesse bash warten mit PID-Beispiel

1. Wenn Sie mit mehreren Prozessen arbeiten, verwenden Sie die PID, um einen Prozess zu identifizieren. Das folgende Beispielskript zeigt einen einzelnen Anwendungsfall:

#!/bin/bash
echo "Process 1 lasts for 2s" && sleep 2 &
PID=$!
echo "Process 2 lasts for 3s" && sleep 3 &
echo "Current time $(date +%T)"
wait $PID
echo "Process 1 ended at time $(date +%T) with exit status $?"
wait $!
echo "Process 2 ended at time $(date +%T) with exit status $?"

2. Speichern Sie das Skript als multi_wait.sh . Machen Sie das Skript ausführbar mit:

sudo chmod +x multi_wait.sh

3. Führen Sie das Skript aus, um die Ausgabe anzuzeigen:

./multi_wait.sh

Das Skript benötigt zwei Sekunden, um den ersten Vorgang abzuschließen (aufgrund von sleep 2 ) und drei Sekunden, um den zweiten Vorgang abzuschließen. Die beiden Prozesse werden gleichzeitig ausgeführt und beide sind in drei Sekunden abgeschlossen.


Ubuntu
  1. Linux-Quellbefehl mit Beispielen

  2. wc Linux-Befehl mit Beispielen

  3. Bash HereDoc Tutorial mit Beispielen

  4. Nohup-Befehl mit Beispielen

  5. '&&' vs. '&' mit dem 'test'-Befehl in Bash

Bash-Scripting – Printf-Befehl mit Beispielen erklärt

Wall-Befehl in Linux mit Beispielen

Sortierbefehl in Linux mit Beispielen

Usermod-Befehl mit Beispielen

Linux-IP-Befehl mit Beispielen

Wait-Befehl in Linux mit praktischen Beispielen erklärt