Wie wartet man unter Linux auf den Abschluss eines bestimmten Prozesses?

Wir haben einen Wartebefehl von Linux, der darauf wartet, dass ein oder mehrere Prozesse im System abgeschlossen werden. Mit dem vielseitigen Wartebefehl von Linux können wir herausfinden, wann ein bestimmter Prozess abgeschlossen ist. Als Ergebnis wird der Beendigungsstatus zurückgegeben, sodass wir feststellen können, ob der Prozess erfolgreich beendet wurde oder aus einem anderen Grund fehlgeschlagen ist. Der Wartebefehl wird weiterhin ausgeführt, während er darauf wartet, dass bestimmte Hintergrundaufgaben abgeschlossen werden. Der Linux-Wartebefehl wird in den folgenden Anwendungsfällen verwendet, um seine Funktionsweise zu zeigen.

Beispiel Nr. 1: Verwenden eines Wartebefehls für einen Bash-Einzelprozess.

Wir verwenden den Befehl „wait“, um anzugeben, wann der Hintergrundprozess eines Skripts mit der Verarbeitung beginnen muss. Im folgenden Bash-Skript haben wir den Echo-Befehl verwendet, der die Anweisung „Hintergrundprozess“ ausgibt, was bedeutet, dass der Hintergrundprozess verarbeitet wird. Bei diesem Echo-Befehl haben wir das Symbol „&“ verwendet, mit dem ein Befehl im Hintergrund ausgeführt wird. Dann haben wir erneut die beiden Echo-Befehle verwendet, die die Anweisung „Erste Aufgabe“ und „Zweite Aufgabe“ ausgeben.

Danach haben wir die Funktion „Wartevorgang“ aufgerufen, die anhält, bis der Hintergrundprozess nach dem zweiten Prozess abgeschlossen ist, bevor mit dem dritten Prozess fortgefahren wird. Die dritte Aufgabe wird am Ende des Hintergrundprozesses verarbeitet, der jederzeit beendet werden kann.

#!/bin/bash

echo Hintergrundprozess &
echo Erste Aufgabe
echo Zweite Aufgabe
Warten
echo Dritte Aufgabe

Die Ausgabe des Wartebefehls zeigte an, dass nach Abschluss der ersten und zweiten Aufgabe die dritte Aufgabe verarbeitet wird. Der Wartebefehl generiert die Anweisung „Hintergrundprozess“, wenn die erste und zweite Aufgabe einige Zeit in Anspruch nimmt.

Linux@VirtualBox:~ bash ./Bash.sh

Erste Aufgabe
Zweite Aufgabe
Hintergrundprozess

Dritte Aufgabe

Beispiel Nr. 2: Verwenden eines Wartebefehls für mehrere Bash-Prozesse.

Da das frühere Bash-Skript den Wartebefehl für den einzelnen Prozess verwendet, verwenden wir den Wartebefehl im Bash-Skript für die Ausführung mehrerer Prozesse. Wenn der Wartebefehl mit dem Flag -n verwendet wird, wartet er nur auf den ersten Prozess unter den Hintergrundprozessen. Unten finden Sie das Bash-Skript, in dem wir zunächst die drei Schlafbefehle mit bestimmten Werten bereitgestellt haben. Der Sleep-Befehl wird mit dem Zeichen „&“ definiert, das wir bereits zuvor besprochen haben und das anzeigt, dass die Hintergrundprozesse ausgeführt werden.

Der erste Sleep-Befehl gibt an, dass der Hintergrundprozess „10“ Sekunden benötigt, um abgeschlossen zu sein. Der Hintergrundprozess benötigt „5“ Sekunden für den Abschluss und der dritte Schlafbefehl benötigt „3“ Sekunden für die Ausführung des Hintergrundprozesses. Als nächstes wird der Befehl wait -n aufgerufen, der nur auf den kürzesten Prozess wartet. Hier dauert der kürzeste Prozess unter den anderen Prozessen drei Sekunden. Wenn der kürzeste Prozess abgeschlossen ist, wird die Echo-Anweisung „Erster Auftrag abgeschlossen“ gedruckt.

Danach haben wir erneut den Befehl wait -n bereitgestellt. Dies wird wiederum auf den weniger zeitaufwändigen Vorgang warten. Jetzt dauert der weniger zeitaufwändige Vorgang fünf Sekunden, da der Vorgang drei Sekunden dauert. Nachdem der Vorgang fünf Sekunden lang gewartet wurde, wird die nächste Echo-Anweisung „nächsten Job abgeschlossen“ angezeigt. Der nächste Wartebefehl verwendet kein Flag, was bedeutet, dass dieser Wartebefehl zunächst darauf wartet, dass alle Prozesse abgeschlossen sind, und dann die Echo-Anweisung „Alle Jobs abgeschlossen“ anzeigt.

#!/bin/bash

Schlaf 10 &
Schlaf 5 &
Schlaf 3 &
warte -n
echo „Erster Auftrag abgeschlossen.“
warte -n
echo „Nächsten Auftrag abgeschlossen.“
Warten
echo „Alle Arbeiten abgeschlossen.“

Die Ergebnisse des Bash-Skripts mehrerer Prozesse mit dem obigen Wartebefehl werden auf dem folgenden Bash-Shell-Bildschirm angezeigt. Die Wartebefehle mit der Option -n pausieren für 3 und 5 Sekunden. Dies ist die Zeitspanne, die der erste und nächste Job benötigt, um die Wartebefehle abzuschließen, und pausieren dann für zehn Sekunden, was der Zeitspanne entspricht, die für den verbleibenden Hintergrund benötigt wird Prozesse zu beenden.

Linux@VirtualBox:~ bash ./Bash.sh

„Erster Auftrag abgeschlossen.“
„Nächsten Auftrag abgeschlossen.“
„Alle Arbeiten abgeschlossen.“

Beispiel Nr. 3: Verwenden eines Wartebefehls für Bash mehrerer Prozesse mit Prozess-ID.

Wenn wir im Bash-Skript mit dem Befehl „wait“ mehrere Prozesse bearbeiten, ist die Prozess-ID hilfreich, um den Prozess zu identifizieren. Hier im Bash-Skript haben wir den echo-Befehl verwendet, um die Anweisung „Process1 for 3 seconds“ auszugeben. Dann haben wir den UND-Operator „&&“ verwendet, um einen weiteren Befehl festzulegen, nämlich den Sleep-Befehl. Der Schlafbefehl nimmt den Wert „3“ an, was die Zeit angibt, die der Hintergrundprozess benötigt, um abgeschlossen zu werden. Dann haben wir die Variable „ProcessID“ deklariert, die ein „$!“ bereitstellte. Wert. Das Symbol „$!“ Ruft die Prozess-ID des zuletzt ausgeführten Befehls ab. Der zuletzt ausgeführte Befehl, der „3“ Sekunden dauert, wird in der Variablen „ProcessID“ gespeichert.

Jetzt haben wir einen weiteren Echo-Befehl angegeben, der „Process1 for 5 seconds“ zusammen mit dem Sleep-Befehl ausgibt. Der Sleep-Befehl benötigt fünf Sekunden, um den zweiten Hintergrundprozess abzuschließen. Als Nächstes haben wir die aktuelle Uhrzeit gedruckt, indem wir die DateTime-Struktur der Bash verwendet haben. Anschließend wird der Wartebefehl verwendet, bei dem die Variable „ProcessID“ als Argument festgelegt wird. Der Befehl „wait“ enthält nun die Wartezeit der Variable „processID“, die drei Sekunden beträgt.

Nach drei Sekunden ist der verbleibende Vorgang des Bash-Skripts abgeschlossen. Beachten Sie, dass wir einen weiteren Wartebefehl haben, der mit dem Zeichen „$!“ übergeben wird. als Argument Dann wird die letzte Echo-Anweisung ausgeführt. zum Abrufen der zuletzt ausgeführten Befehlsprozess-ID.

#!/bin/bash
echo „Prozess1 für 3 Sekunden“ && Sleep 3 &
ProzessID=$!
echo „Prozess1 für 5 Sekunden“ && Sleep 5 &
echo „Aktuelle Zeit $(Datum +%T)“
warte $ProcessID
echo „Prozess1-Beendigungszeit $(Datum +%T) mit Exit-Status $?“
warte $!
echo „Prozess2-Beendigungszeit $(Datum +%T) mit Exit-Status $?“

Die Ausgabe zeigte zunächst den Abschluss des Prozesses zusammen mit der Zeit bis zum Abschluss an. Dann ist der aktuelle Zeitprozess abgeschlossen. Danach erfolgte die Wartezeit und dann wurde der nächste Echo-Befehl ausgeführt, der den Exit-Statuswert Null zusammen mit der Beendigungszeit anzeigte. Der Wert Null-Exit-Status bedeutet, dass der Prozess erfolgreich beendet wurde. Andererseits erfolgt die Pause so lange, bis der letzte Vorgang abgeschlossen ist, und die letzte Anweisung wird angezeigt.

Linux@VirtualBox:~ bash ./Bash.sh

Process1 für 5 Sekunden

Process1 für 3 Sekunden

Aktuelle Uhrzeit 00:31:20

Prozess1-Beendigungszeit 00:31:23 mit Exit-Status 0

Prozess2-Beendigungszeit 00:31:25 mit Exit-Status 0

Abschluss

Der Artikel bietet eine Möglichkeit, unter Linux auf den Abschluss eines bestimmten Prozesses zu warten. Wir haben den Befehl „wait“ verwendet, um auf den laufenden Prozess zu warten. Wir verwenden zuerst den Wartebefehl, damit der einzelne Prozess wartet, und rufen dann den Wartebefehl für die mehreren Prozesse auf. Anschließend wird der Wartebefehl über die Prozess-ID aufgerufen, um die Prozess-ID mehrerer Prozesse abzurufen.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen