(await process completion)
Das in die POSIX-Shell sh eingebaute Kommando wait wartet,
bis der vorher gestartete Hintergrundprozess mit der angegebenen Prozessnummer (PID) beendet ist, oder
bis alle vorher gestarteten Hintergrundprozesse beendet sind, wenn Sie beim Aufruf keine Prozessnummer angeben.
Im Dialog wartet die Shell standardmäßig nicht auf die Beendigung eines vorher gestarteten Hintergrundkommandos, sondern gibt sofort das Bereitzeichen aus. Bei Kommandos, die nicht im Hintergrund gestartet werden, wartet die Shell immer auf das Ende der Ausführung. Für Shell-Prozeduren gilt das gleiche. Wenn eine Shell-Prozedur ein Kommando enthält, das die Ausgabe eines vorher im Hintergrund gestarteten Kommandos bearbeiten soll, können Sie mit wait sicherstellen, dass dieses Hintergrundkommando rechtzeitig beendet ist.
Erhalten Sie beim Starten eines Hintergrundprozesses die Fehlermeldung
fork failed - too many processes
dann können Sie Ihr System durch den Gebrauch von wait entlasten. Wenn Sie hierbei keinen Erfolg erzielen, ist die Systemprozesstabelle voll oder es sind zu viele Prozesse im Vordergrund aktiv.
Hinweis
Besteht eine Pipeline aus 3 oder mehr Teilen, so gruppiert die Shell jeweils zwei Prozesse und ordnet diesen einen Steuerprozess zu. Diese beiden Prozesse sind damit keine Sohnprozesse der Shell. Beachten Sie deshalb, dass wait auf Prozesse, die keine Sohnprozesse der Shell sind, nicht wartet.
Syntax
wait[ prozessnummer...] |
Nummer des Hintergrundprozesses, auf dessen Ende wait warten soll. Sie können nur eine Prozessnummer angeben. Wenn Sie mehrere Prozessnummern angeben, gibt wait keine Fehlermeldung aus, sondern wartet auf die Beendigung des Hintergrundprozesses, den Sie beim Aufruf als ersten angegeben haben. Das Kommando wait gibt als Endestatus den Endestatus des Hintergrundprozesses zurück. Haben Sie die Prozessnummer eines bereits beendeten Hintergrundprozesses angegeben, dann verhält sich wait wie bei nicht angegebener Prozessnummer (siehe Endestatus). Der Variablen ! (Ausrufezeichen) weist die Shell immer die Prozessnummer des zuletzt im Hintergrund gestarteten Kommandos zu. Mit $! können Sie auf den Inhalt dieser Variablen zugreifen. prozessnummer nicht angegeben: |
Endestatus
Wenn Sie wait ohne Argument aufgerufen haben und alle bekannten Prozessnummern sich beendet haben, ist der Endestatus immer gleich 0. |
1-126 | Fehler |
127 | Das Kommando der letzten Prozessnummer ist unbekannt. |
Internationale Umgebung
Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos wait: LANG Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden. LC_ALL Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen. LC_CTYPE Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten und Eingabedateien) sowie die Einteilung der Zeichen in Groß- und Kleinbuchstaben und deren Übereinstimmung. LC_MESSAGES Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden. NLSPATH Legt den Pfad der Meldungsdateien für LC_MESSAGES fest. |
Beispiel 1
Die Shell soll auf den gestarteten Hintergrundprozess warten:
|
Beispiel 2
Die Shell-Prozedur warte zeigt, wie man auf das Ende eines bestimmten Hintergrundkommandos warten kann. Diese Shell-Prozedur hat den folgenden Inhalt: : Aufruf mit sh warte sort liste > sortiert & pid1=$! tar cvf /dev/dsk/f0t /home/anna & pid2=$! ... wait $pid1 pg sortiert Die jeweiligen Prozessnummern der Hintergrundkommandos werden in den Variablen pid1 und pid2 gespeichert. So sind diese Prozessnummern für den späteren Gebrauch gesichert, da die Variable ! immer nur die Prozessnummer des zuletzt im Hintergrund gestarteten Kommandos enthält. Das Kommando wait wartet auf das Ende des Kommandos sort. Erst dann gibt pg den Inhalt der Datei sortiert aus. |
Siehe auch
waitpid() [4] |