Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

waitid - auf Zustandsänderung von Kindprozessen warten

&pagelevel(4)&pagelevel

Definition

#include <wait.h>

int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);

Beschreibung

Der aufrufende Prozess wird durch waitid() solange angehalten, bis einer der Kindprozesse den Zustand ändert. Der aktuelle Zustand des betreffenden Kindprozesses wird in die Struktur eingetragen, auf die infop zeigt. Wenn ein Kindprozess den Zustand vor dem Aufruf von waitid() geändert hat, kehrt waitid() sofort zurück.

Die Argumente idtype und id geben an, auf welche Kindprozesse waitid() warten soll.

  • Wenn idtype gleich P_PID ist, wartet waitid() auf den Kindprozess, der die Prozessnummer (pid_t) id hat.

  • Wenn idtype gleich P_PGID ist, wartet waitid() auf einen der Kindprozesse mit der Prozessgruppennummer (pid_t) id.

  • Wenn idtype gleich P_ALL ist, wartet waitid() auf einen beliebigen Kindprozess, und id wird ignoriert.

Das Argument options wird verwendet, um anzugeben, auf welche Zustandsänderungen waitid() warten soll. Die Zustandsänderungen werden durch bitweise ODER-Verknüpfung der folgenden Flags angegeben:

WEXITED

wartet darauf, dass Prozesse terminieren (exit).

WTRAPPED

wartet darauf, dass ablaufverfolgte Prozesse auf Unterbrechungen stoßen oder einen Haltepunkt erreichen (siehe ptrace()).

WSTOPPED

wartet und liefert den Prozessstatus eines Kindprozesses, welcher nach dem Empfang eines Signals gestoppt hat.

WCONTINUED

liefert den Status für einen Kindprozess, der angehalten und wieder aufgenommen wurde.

WNOHANG

kehrt sofort zurück, falls keine Kindprozesse vorhanden sind, auf die gewartet werden müsste.

WNOWAIT

hält den Prozess, dessen Status in infop zurückgegeben wurde, in einem Wartezustand. Der Status dieses Prozesses wird dadurch nicht berührt, es kann erneut auf diesen Prozess gewartet werden, wenn der Aufruf abgeschlossen ist.

infop muss auf eine siginfo_t-Struktur zeigen, wie sie in siginfo() definiert wird. Kehrt waitid() zurück, weil es einen Kindprozess gefunden hat, der die in idtype und options spezifizierten Bedingungen erfüllt, wird vom System in siginfo_t der Zustand dieses Prozesses eingetragen. Das Strukturelement si_signo hat immer den Wert SIGCHILD.

Werden Threads verwendet, so wirkt sich diese Funktion auf den Prozess oder auf einen Thread wie folgt aus: Der aufrufende Thread wird solange suspendiert, bis einer der Kindprozesse den Zustand ändert.

Returnwert

0

wenn waitid() auf Grund der Zustandsänderung eines Kindprozesses zurückkehrt

 

-1

sonst. errno wird gesetzt, um den Fehler anzuzeigen.

Fehler

waitid() schlägt fehl, wenn wenigstens eine der folgenden Bedingungen erfüllt ist:

 

ECHILD

Für den aufrufenden Prozess existieren keine Kindprozesse, auf die nicht gewartet wird.

 

EINTR

waitid() wurde unterbrochen, weil der aufrufende Prozess ein Signal empfangen hat.

 

EINVAL

Für options wurde ein ungültiger Wert übergeben
oder  idtype und id geben eine ungültige Prozessmenge an.

 

EFAULT

infop zeigt auf eine ungültige Adresse.

Siehe auch

exec, exit(), wait(), sys/wait.h.