Linux

Bash-Wartebefehl

Bash-Wartebefehl

warten ist ein Befehl, der auf den Abschluss der angegebenen Jobs wartet und den Exit-Status des gewarteten Befehls zurückgibt.

Seit der warten Der Befehl wirkt sich auf die aktuelle Shell-Ausführungsumgebung aus, er ist in den meisten Shells als integrierter Befehl implementiert.

In diesem Artikel untersuchen wir die integrierte Bash-Funktion warten Befehl.

Bash warten Befehl #

Die allgemeine Syntax des warten eingebaut hat die folgende Form:

warten [Optionen] ID 

ICH WÜRDE ist die Prozess- oder Job-ID. Wenn nein ICH WÜRDE angegeben ist, wartet der Befehl, bis alle untergeordneten Hintergrundjobs abgeschlossen sind.

Das warten Befehl gibt den Exit-Status des letzten Befehls zurück, auf den gewartet wurde.

Zum Beispiel, um mit PID auf einen Hintergrundprozess zu warten 7654, du würdest verwenden:

warte 7654

Wenn mehrere Prozesse angegeben werden, wartet der Befehl, bis alle Prozesse abgeschlossen sind.

Jobs werden mithilfe der Jobspezifikation („jobspec“) spezifiziert, die eine Möglichkeit ist, auf die Prozesse zu verweisen, aus denen der Job besteht. Eine Jobspezifikation beginnt mit einem Prozentsymbol gefolgt von der Jobnummer (%n). Hier ist ein Beispiel:

Führen Sie einen Befehl im Hintergrund aus:

rsync -a /home /tmp/home &

Die Shell-Job-ID (in Klammern eingeschlossen) und die Prozess-ID werden auf Ihrem Terminal angezeigt:

[2] 54377 

Um auf den Auftrag zu warten, führen Sie die warten Befehl gefolgt von der Stellenbeschreibung:

warte %2

Bei Aufruf mit dem -nein Option wartet der Befehl nur auf den Abschluss eines einzelnen Jobs aus den angegebenen Pids oder Jobspezifikationen und gibt seinen Exit-Status zurück. Wenn keine Argumente angegeben werden, warte -n wartet auf den Abschluss eines Hintergrundjobs und gibt den Job-Exit-Status zurück.

warte -n 45432 54346 76573

Im obigen Beispiel, warte -n druckt nur den Rückgabestatus des Jobs, der zuerst beendet wird; es zeigt nicht die PID des Jobs an. Wenn Sie die Job-PID oder Jobspec abrufen möchten, für die der Exit-Status zurückgegeben wird, verwenden Sie die -p Möglichkeit, es einer Variablen zuzuweisen:

warten -p job_id -n 45432 54346 76573

-p Option wurde in Bash 5 eingeführt.1. Wenn Sie eine ältere Bash-Version verwenden, erhalten Sie die Fehlermeldung „Ungültige Option“.

Das -f Option sagt warten warten, bis jede pid oder jobspec tatsächlich beendet wird, bevor der Exit-Code zurückgegeben wird, anstatt zurückzukehren, wenn der Jobstatus geändert wird. Diese Option ist nur gültig, wenn die Jobsteuerung aktiviert ist. Standardmäßig ist die Auftragssteuerung nur für interaktive Eingabeaufforderungen aktiviert.

Beispiele #

warten wird normalerweise in Shell-Skripten verwendet, die untergeordnete Prozesse erzeugen, die parallel ausgeführt werden.

Um die Funktionsweise des Befehls zu veranschaulichen, erstellen Sie das folgende Skript:

#!/bin/bash sleep 30 & process_id=$! echo "PID: $process_id" wait $process_id echo "Exit-Status: $?" 

Lassen Sie uns den Code Zeile für Zeile erklären:

  1. Die erste Zeile heißt Shebang und teilt dem Betriebssystem mit, welcher Interpreter zum Parsen des Rests der Datei verwendet werden soll.
  2. Wir verwenden die schlafen Befehl zum Emulieren eines zeitaufwendigen Hintergrundprozesses.
  3. $! ist eine interne Bash-Variable, die die PID des letzten Joblaufs im Hintergrund speichert. In diesem Beispiel ist das die PID des of schlafen Befehl. Wir speichern die PID in einer Variablen (Prozess ID).
  4. Druckt die PID-Nummer.
  5. Die PID wird an die warten Befehl, der wartet, bis der schlafen Befehl abgeschlossen.
  6. Druckt den Ausgangsstatus des of warten Befehl. $? ist eine interne Bash-Variable, die den Exit-Status des zuletzt ausgeführten Befehls enthält.

Wenn Sie das Skript ausführen, wird es in etwa wie folgt gedruckt:

PID: 36353 Ausgangsstatus: 0 

Hier ein Beispiel mit dem -nein Möglichkeit:

#!/bin/bash sleep 3 & sleep 30 & sleep 5 & wait -n echo "Erster Auftrag abgeschlossen." wait echo "Alle Jobs abgeschlossen." 

Wenn das Skript ausgeführt wird, werden 3 Hintergrundprozesse erzeugt. warte -n wartet, bis der erste Job abgeschlossen ist und die Echo-Anweisung gedruckt wird. warten wartet, bis alle untergeordneten Hintergrundjobs abgeschlossen sind.

erster Auftrag erledigt alle Aufträge erledigt 

Das letzte Beispiel erklärt die -f Möglichkeit. Öffnen Sie das Terminal und führen Sie Folgendes aus:

Schlaf 3600 &
[1] 46671 

Warten Sie auf den Vorgang:

warte 46671

Öffnen Sie ein anderes Terminal und stoppen Sie den Vorgang mit der töten Befehl:

töten -STOP 46671

Sobald sich der Prozessstatus ändert, wird die warten Befehl wird abgeschlossen und gibt den Prozess-Exit-Code zurück.

Wiederholen Sie nun die gleichen Schritte, verwenden Sie dieses Mal jedoch warte -f $pid:

Schlaf 3600 &warte -f 46671

Stoppen Sie den Vorgang vom anderen Terminal aus:

töten -STOP 46671

Diesmal die warten Befehl wird nicht abgeschlossen. Es läuft bis zum schlafen Prozess wird beendet.

Fazit #

Das warten Der Befehl wartet auf den Abschluss der angegebenen Jobs und gibt den Exit-Code des Jobs zurück.

Wenn Sie Fragen oder Feedback haben, können Sie gerne einen Kommentar hinterlassen.

OpenTTD-Tutorial
OpenTTD ist eines der beliebtesten Wirtschaftssimulationsspiele auf dem Markt. In diesem Spiel musst du ein wunderbares Transportunternehmen aufbauen....
SuperTuxKart für Linux
SuperTuxKart ist ein großartiger Titel, der entwickelt wurde, um Ihnen das Mario Kart-Erlebnis kostenlos auf Ihrem Linux-System zu bieten. Es ist ziem...
Battle for Wesnoth-Tutorial
The Battle for Wesnoth ist eines der beliebtesten Open-Source-Strategiespiele, die Sie derzeit spielen können. Dieses Spiel befindet sich nicht nur se...