wait, waitpid, wait3, wait364und wait4 -Subroutine
Zweck
Wartet auf das Stoppen oder Beenden eines untergeordneten Prozesses.
Bibliothek
Standard-C-Bibliothek (libc.a)
Syntax
#include <sys/wait.h>
pid_t wait (StatusLocation)
int *StatusLocation;
pid_t wait ((void *) 0)#include <sys/wait.h>
pid_t waitpid (ProcessID,StatusLocation,Options)
int *StatusLocation;
pid_t ProcessID;
int Options;#include <sys/time.h>
#include <sys/resource.h>
#include <sys/wait.h>
pid_t wait3 (StatusLocation, Options,ResourceUsage)
int *StatusLocation;
int Options; struct rusage *ResourceUsage;
pid_t wait364 (StatusLocation, Options,ResourceUsage)
int *StatusLocation;
int Options;
struct rusage64 *ResourceUsage;
pid_t wait4 (ProcessID,(StatusLocation, Options,ResourceUsage)
pid_t ProcessID;
int *StatusLocation;
int Options;
struct rusage64 *ResourceUsage;Beschreibung
Die Subroutine Warten setzt den aufrufenden Thread aus, bis der Prozess ein Signal empfängt, das nicht blockiert oder ignoriert wird, oder bis einer der untergeordneten Prozesse des aufrufenden Prozesses gestoppt oder beendet wird. Die Subroutine Warten kehrt ohne Warten zurück, wenn der untergeordnete Prozess, auf den gewartet wird, gestoppt oder vor dem Aufruf beendet wird. Bei einem erfolgreichen Exit wird die Pid des beendeten Prozesses von der Subroutine Warten zurückgegeben.
Die Subroutine waitpid enthält einen Parameter ProcessID , mit dem der aufrufende Thread den Status einer bestimmten Gruppe von untergeordneten Prozessen gemäß den folgenden Regeln erfassen kann:
- Wenn der Wert für ProcessID dem Wert -1entspricht, wird der Status für jeden untergeordneten Prozess angefordert. In dieser Hinsicht entspricht die Subroutine waitpid der Subroutine wait .
- Ein Wert für ProcessID , der größer als 0 ist, gibt die Prozess-ID eines einzelnen untergeordneten Prozesses an, für den der Status angefordert wird.
- Wenn der Parameter ProcessID gleich 0 ist, wird der Status für jeden untergeordneten Prozess angefordert, dessen Prozessgruppen-ID der Prozess-ID des aufrufenden Threads entspricht.
- Wenn der Parameter ProcessID kleiner als 0 ist, wird der Status für jeden untergeordneten Prozess angefordert, dessen Prozessgruppen-ID dem absoluten Wert des Parameters ProcessID entspricht.
Die Varianten der Subroutinen Waitpid, wait3, wait364und wait4 stellen einen Parameter Optionen zur Änderung des Verhaltens der Subroutine bereit. Es werden zwei Werte definiert, WNOHANG und WUNTRACE, die durch Angabe des bitweisen ODER kombiniert werden können. Die Option WNOHANG verhindert, dass der aufrufende Thread ausgesetzt wird, auch wenn untergeordnete Prozesse warten müssen. In diesem Fall wird der Wert 0 zurückgegeben, wenn keine untergeordneten Prozesse vorhanden sind, die gestoppt oder beendet werden. Wenn die Option WUNTRACE festgelegt ist, gibt der Aufruf auch Informationen zurück, wenn untergeordnete Elemente des aktuellen Prozesses gestoppt werden, da sie ein Signal SIGTTIN, SIGTTOU, SIGSSTPoder SIGTSTOP empfangen.
Die Subroutine wait364 kann aufgerufen werden, um 64 -Bit- RUsage -Zähler explizit in einer 32-Bit-Umgebung verfügbar zu machen.
Die Subroutine wait4() ähnelt der Subroutine wait3() , außer dass die Prozess-ID des untergeordneten Elements angegeben werden kann. Die Subroutine wait3() wartet auf jeden untergeordneten Prozess, aber die Subroutine wait4() kann auf einen bestimmten untergeordneten Prozess warten.
64-Bit-Mengen sind auch für 64-Bit-Anwendungen über die Schnittstelle wait3() und wait4() in den Feldern ru_utime und ru_szeit von Struktur 'rusage'verfügbar.
Wenn ein 32-Bit-Prozess mit ptracedebuggt wird, wird die Statusposition auf W_SLWTED gesetzt, wenn der Prozess Laden, Entladenoder Ladebindungaufruft. Wenn ein 64-Bit-Prozess mit ptracedebuggt wird, wird die Statusposition auf W_SLWTED gesetzt, wenn der Prozess Laden oder Entladenaufruft.
Wenn der Debugmodus für Mehrfachverarbeitung aktiviert ist, wird die Statusposition auf W_SEWTED gesetzt, wenn ein Prozess während einer Exec-Subroutine gestoppt wird, und auf W_SFWTED , wenn der Prozess während einer Verzweigung gestoppt wird.
Wenn mehrere Threads auf die Beendigung desselben untergeordneten Prozesses warten, gibt genau ein Thread den Prozessstatus zum Zeitpunkt der Beendigung des untergeordneten Prozesses zurück.
Wenn die FORTSETZUNG -Option festgelegt ist, gibt der Aufruf Informationen zurück, wenn die untergeordneten Elemente des aktuellen Prozesses von einem Jobsteuerungsstopp fortgesetzt werden, deren Status jedoch nicht gemeldet wird.
Parameter
| Element | Beschreibung |
|---|---|
| StatusLocation | Verweist auf eine ganzzahlige Variable mit dem Beendigungsstatus des untergeordneten Prozesses, wie in der Datei sys/wait.h definiert. |
| ProcessID | Gibt den untergeordneten Prozess an. |
| Optionen | Ändert das Verhalten der Subroutine |
| ResourceUsage | Gibt die Position einer Struktur an, die mit Informationen zur Ressourcenauslastung für beendete untergeordnete Elemente ausgeführt werden soll |
Makros
Der Wert, auf den StatusLocation zeigt, wenn wait, waitpid, wait3oder wait4() -Subroutinen zurückgegeben werden, kann als Parameter ReturnedValue für die folgenden Makros verwendet werden, die in der Datei <sys/wait.h> definiert sind, um weitere Informationen zum Prozess und seinem untergeordneten Prozess abzurufen.
WIFCONTINUED(ReturnedValue)
pid_t ReturnedValue;Gibt einen Wert ungleich null zurück, wenn der Status für einen untergeordneten Prozess zurückgegeben wird, der nach dem Stoppen der Jobsteuerung fortgesetzt wird.
WIFSTOPPED(ReturnedValue)
int ReturnedValue;Gibt einen Wert ungleich null zurück, wenn der Status für ein gestopptes untergeordnetes Element zurückgegeben wird
int
WSTOPSIG(ReturnedValue)
int ReturnedValue;Gibt die Nummer des Signals zurück, das zum Stoppen des untergeordneten Elements geführt hat.
WIFEXITED(ReturnedValue)
int ReturnedValue;Gibt einen Wert ungleich null zurück, wenn der Status für die normale Beendigung zurückgegeben wird
int
WEXITSTATUS(ReturnedValue)
int ReturnedValue;Gibt die niedrigstwertigen 8 Bit des untergeordneten Exitstatus zurück.
WIFSIGNALED(ReturnedValue)
int ReturnedValue;Gibt einen Wert ungleich null zurück, wenn der Status für eine abnormale Beendigung zurückgegeben wird
int
WTERMSIG(ReturnedValue)
int ReturnedValue;Gibt die Nummer des Signals zurück, das die Beendigung des untergeordneten Elements verursacht hat.
Rückgabewerte
Wenn die Subroutine wait nicht erfolgreich ist, wird der Wert -1 zurückgegeben und die globale Variable errno wird auf den Fehler gesetzt. Darüber hinaus geben die Subroutinen Waitpid, wait3, wait364und wait4 den Wert 0 zurück, wenn keine gestoppten oder beengten untergeordneten Prozesse vorhanden sind, und die Option WNOHANG wurde angegeben. Die Subroutine Warten gibt ebenfalls den Wert 0 zurück, wenn keine gestoppten oder beengten untergeordneten Prozesse vorhanden sind.
Fehlercodes
Die Subroutinen Warten, Waitpid, wait3, wait364und wait4 sind nicht erfolgreich, wenn eine der folgenden Bedingungen zutrifft:
| Element | Beschreibung |
|---|---|
| EMILD | Der Prozess des aufrufenden Threads hat keine untergeordneten Prozesse, auf die nicht gewartet wird. |
| EINTR | Diese Subroutine wurde durch Empfang eines Signals beendet. |
| EFAULT | Der Parameter StatusLocation oder ResourceUsage verweist auf eine Position außerhalb des Adressraums des Prozesses. |
Die Subroutinen Waitpid und wait4 sind nicht erfolgreich, wenn Folgendes zutrifft:
| Element | Beschreibung |
|---|---|
| EMILD | Die mit dem Parameter ProcessID angegebene Prozess-oder Prozessgruppen-ID ist nicht vorhanden oder kein untergeordneter Prozess des aufrufenden Prozesses. |
Die Subroutinen Waitpid, wait3und wait4 sind nicht erfolgreich, wenn Folgendes zutrifft:
| Element | Beschreibung |
|---|---|
| EINVAL | Der Wert des Parameters Optionen ist ungültig. |