Verwenden des wait-Befehls zur Synchronisierung von Prozessen
In diesem Schritt lernen Sie, wie Sie den wait
-Befehl verwenden können, um Prozesse zu synchronisieren und den Elternprozess so zu machen, dass er auf das Abschluss der Hintergrundprozesse wartet.
Was ist der wait-Befehl?
Der wait
-Befehl wird in Shell-Skripten verwendet, um die Ausführung des Skripts anzuhalten, bis ein oder mehrere Hintergrundprozesse abgeschlossen sind. Dies ist besonders nützlich, wenn Sie sicherstellen müssen, dass bestimmte Aufgaben abgeschlossen sind, bevor Sie mit nachfolgenden Operationen fortfahren.
Verwenden von wait ohne Argumente
Wenn der wait
-Befehl ohne Argumente verwendet wird, wartet er auf das Abschluss aller Hintergrundprozesse.
Erstellen wir ein Skript, das dies demonstriert:
-
Navigieren Sie in Ihr Projektverzeichnis:
cd ~/project
-
Erstellen Sie ein neues Skript:
nano wait_demo.sh
-
Fügen Sie dem Skript den folgenden Inhalt hinzu:
#!/bin/bash
echo "Starting background tasks..."
## Start two background tasks
./long_task.sh &
./long_task.sh &
echo "Waiting for all background tasks to complete..."
wait
echo "All background tasks have completed!"
-
Speichern Sie und verlassen Sie den Editor, indem Sie Strg+O
drücken, dann Enter
und schließlich Strg+X
.
-
Machen Sie das Skript ausführbar:
chmod +x wait_demo.sh
-
Führen Sie das Skript aus:
./wait_demo.sh
Sie werden eine Ausgabe ähnlich der folgenden sehen:
Starting background tasks...
Starting long task with PID 1236
Starting long task with PID 1237
Waiting for all background tasks to complete...
Long task completed
Long task completed
All background tasks have completed!
Beachten Sie, dass die Nachricht "All background tasks have completed!" erst erscheint, nachdem beide langlaufenden Aufgaben abgeschlossen sind. Dies zeigt, wie der wait
-Befehl das Skript anhält, bis alle Hintergrundprozesse abgeschlossen sind.
Verwenden von wait mit einer bestimmten PID
Sie können wait
auch verwenden, um auf einen bestimmten Prozess zu warten, indem Sie seine PID angeben:
-
Erstellen Sie ein weiteres Skript:
nano wait_pid_demo.sh
-
Fügen Sie den folgenden Inhalt hinzu:
#!/bin/bash
echo "Starting background tasks..."
## Start two background tasks and capture their PIDs
./long_task.sh &
pid1=$!
./long_task.sh &
pid2=$!
echo "First process PID: $pid1"
echo "Second process PID: $pid2"
echo "Waiting for the first task to complete..."
wait $pid1
echo "First task has completed!"
echo "Waiting for the second task to complete..."
wait $pid2
echo "Second task has completed!"
-
Speichern Sie und verlassen Sie den Editor, indem Sie Strg+O
drücken, dann Enter
und schließlich Strg+X
.
-
Machen Sie das Skript ausführbar:
chmod +x wait_pid_demo.sh
-
Führen Sie das Skript aus:
./wait_pid_demo.sh
Die Ausgabe wird zeigen, dass das Skript auf jeden Prozess individuell wartet.
Die Variable $!
enthält die PID des zuletzt ausgeführten Hintergrundprozesses. Dies ermöglicht es Ihnen, die PID zu erfassen und später mit dem wait
-Befehl zu verwenden.