Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

exec(2)

exit(2)

fork(2)

pause(2)

ptrace(2)

signal(2)

waitid(2)

wait3(3)

signal(5)

types(5)

wait(5)

wstat(5)

wait(2)                                                             wait(2)

NAME
     wait, waitpid - Auf Anhalten oder Beenden von Sohnprozessen warten

SYNTAX
     #include <sys/types.h>
     #include <sys/wait.h>

     pidt wait(int *statloc);

     pidt waitpid(pidt pid, int *statloc, int options);

BESCHREIBUNG
     Mit den Funktionen wait() und waitpid() kann der aufrufende Prozeß
     Statusinformationen zu einem seiner Sohnprozesse erhalten. Über ver-
     schiedene Optionen können Statusinformationen zu beendeten oder ange-
     haltenen Sohnprozessen abgerufen werden. Liegen Statusinformationen
     für mehrere Sohnprozesse vor, ist die Reihenfolge, in der sie ausgege-
     ben werden, unbestimmt.

     Die Funktion wait() stellt die Ausführung des aufrufenden Prozesses so
     lange zurück, bis Statusinformationen für einen seiner beendeten Sohn-
     prozesse verfügbar sind, oder bis zur Auslieferung eines Signals, das
     entweder die Ausführung einer Signalbehandlungsfunktion oder die Been-
     digung des Prozesses zur Folge hat. Stehen Statusinformationen bereits
     vor dem Aufrufen von wait() zur Verfügung, kehrt die Funktion sofort
     zurück.

     Die Funktion waitpid() verhält sich genau wie wait(), wenn das Argu-
     ment pid gleich (pidt)-1 und das Argument options gleich 0 ist.
     Andernfalls wird das Verhalten durch die Werte der Argumente pid und
     options bestimmt.

     Das Argument pid gibt eine Menge von Sohnprozessen an, für die Status-
     informationen angefordert werden. Die Funktion waitpid() gibt nur den
     Status eines Sohnprozesses aus dieser Menge zurück.

     -  Wenn pid gleich (pidt)-1 ist, wird der Status für jeden Sohnprozeß
        angefordert. In dieser Hinsicht entspricht waitpid() also der Funk-
        tion wait().

     -  Wenn pid größer als 0 ist, gibt das Argument die Prozeß-ID eines
        einzelnen Sohnprozesses an, für den der Status angefordert wird.

     -  Wenn pid gleich 0 ist, wird der Status für jeden Sohnprozeß ange-
        fordert, dessen Prozeßgruppen-ID der des aufrufenden Prozesses ent-
        spricht.

     -  Wenn pid kleiner als (pidt)-1 ist, wird der Status für jeden Sohn-
        prozeß angefordert, dessen Prozeßgruppen-ID der des Absolutwerts
        von pid entspricht.





Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

wait(2)                                                             wait(2)

     Das Argument options wird aus der bitweisen OR-Verknüpfung von null
     oder mehr der folgenden Flags gebildet, die in der Include-Datei
     <sys/wait.h> definiert sind:

     WCONTINUED      Die Funktion waitpid() gibt den Status jedes wiede-
                     raufgenommenen Sohnprozesses zurück, der durch pid
                     angegeben ist, und dessen Status seit der Wiederauf-
                     nahme nach einem Anhalten durch die Ablaufsteuerung
                     noch nicht ausgegegeben wurde.

     WNOHANG         Die Funktion waitpid() stellt die Ausführung des auf-
                     rufenden Prozesses nicht zurück, wenn der Status für
                     einen der durch pid angegebenen Sohnprozesse nicht
                     sofort verfügbar ist.

     WUNTRACED       Der Status aller von pid angegebenen Sohnprozesse, die
                     angehalten wurden und deren Status seither noch nicht
                     zurückgegeben wurden, wird ebenfalls an den anfordern-
                     den Prozeß ausgegeben.

     Wenn für den aufrufenden Prozeß SANOCLDWAIT gesetzt oder SIGCHLD auf
     SIGIGN gesetzt ist, und der Prozeß keine in Zombie-Prozesse umgewan-
     delte Sohnprozesse hat, auf die nicht gewartet wird, blockiert er so
     lange, bis alle seine Sohnprozesse beendet sind, wait() und waitpid()
     schlagen fehl, und errno wird auf ECHILD gesetzt.

     Wenn wait() oder waitpid() zurückkehren, weil der Status eines Sohn-
     prozesses verfügbar ist, geben diese Funktionen einen der Prozeß-ID
     des Sohnprozesses entsprechenden Wert zurück. Ist in diesem Fall der
     Wert des Arguments statloc kein Nullzeiger, werden die Informationen
     an der Position gespeichert, auf die statloc zeigt. Nur wenn der
     zurückgegebene Status von einem beendeten Sohnprozeß stammt, der aus
     der Funktion main() den Wert 0 zurückgegeben oder im Argument status
     den Wert 0 (Null) an exit() oder exit() übergeben hat, ist der Wert,
     der an der Position gespeichert wird, auf die statloc zeigt, gleich
     0. Unabhängig vom Wert können diese Informationen mit Hilfe der fol-
     genden, in <sys/wait.h> definierten Makros interpretiert und als ganz-
     zahlige Ausdrücke ausgewertet werden. Das Argument statval ist der
     ganzzahlige Wert, auf den statloc zeigt.

     WIFEXITED(statval)
          Gibt einen Wert ungleich Null aus, wenn der Status für einen nor-
          mal beendeten Sohnprozeß zurückgegeben wurde.

     WEXITSTATUS(statval)
          Wenn der Wert von WIFEXITED(statval) ungleich Null ist, gibt
          dieses Makro die niederwertigsten 8 Bits des Arguments status
          aus, das der Sohnprozeß an exit() oder exit() übergeben hat,
          oder den Wert, den der Sohnprozeß aus main() zurückgegeben hat.





Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

wait(2)                                                             wait(2)

     WIFSIGNALED(statval)
          Gibt einen Wert ungleich Null aus, wenn der Status für einen
          Sohnprozeß zurückgegeben wurde, der aufgrund eines Signals been-
          det wurde, das nicht bearbeitet worden ist [siehe signal(5)].

     WTERMSIG(statval)
          Wenn der Wert von WIFSIGNALED(statval) ungleich Null ist, gibt
          dieses Makro die Nummer des Signals aus, das die Beendigung des
          Sohnprozesses verursacht hat.

     WIFSTOPPED(statval)
          Gibt einen Wert ungleich Null aus, wenn der Status für einen der-
          zeit angehaltenen Sohnprozeß zurückgegeben wurde.

     WSTOPSIG(statval)
          Wenn der Wert von WIFSTOPPED(statval) ungleich Null ist, gibt
          dieses Makro die Nummer des Signals aus, durch das der Sohnprozeß
          angehalten wurde.

     WIFCONTINUED(statval)
          Gibt einen Wert ungleich Null aus, wenn der Status für einen
          Sohnprozeß zurückgegeben wurde, der nach dem Anhalten durch die
          Ablaufsteuerung wiederaufgenommen wurde.

     Wenn die Information, auf die statloc zeigt, durch einen Aufruf von
     waitpid() gespeichert wurde, der das Flag WUNTRACED aber nicht das
     Flag WCONTINUED angegeben hat, gibt nur eines der Makros
     WIFEXITED(*statloc), WIFSIGNALED(*statloc) und WIFSTOPPED(*statloc)
     einen Wert ungleich Null aus.

     Wenn die Information, auf die statloc zeigt, durch einen Aufruf von
     waitpid() gespeichert wurde, der die Flags WUNTRACED und WCONTINUED
     angegeben hat, gibt nur eines der Makros WIFEXITED(*statloc),
     WIFSIGNALED(*statloc), WIFSTOPPED(*statloc) und
     WIFCONTINUED(*statloc) einen Wert ungleich Null aus.

     Wenn die Information, auf die statloc zeigt, durch einen Aufruf von
     waitpid() gespeichert wurde, der keines der Flags WUNTRACED oder
     WCONTINUED angegeben hat, oder durch einen Aufruf der Funktion wait(),
     gibt nur eines der Makros WIFEXITED(*statloc) und
     WIFSIGNALED(*statloc) einen Wert ungleich Null aus.

     Wenn die Information, auf die statloc zeigt, durch einen Aufruf von
     waitpid() gespeichert wurde, der nicht das Flag WUNTRACED, aber das
     Flag WCONTINUED angegeben hat, oder durch einen Aufruf der Funktion
     wait(), gibt nur eines der Makros WIFEXITED(*statloc),
     WIFSIGNALED(*statloc) und WIFCONTINUED(*statloc) einen Wert ungleich
     Null aus.






Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

wait(2)                                                             wait(2)

     Es können weitere implementierungsspezifische Bedingungen vorliegen,
     unter denen wait() oder waitpid() Statusinformationen zurückgeben.
     Dies geschieht jedoch nur, wenn der aufrufende Prozeß oder einer sei-
     ner Sohnprozesse expliziten Gebrauch von einer nichtstandardmäßigen
     Erweiterung macht. In diesen Fällen ist die Interpretation des zurück-
     gegebenen Status von der jeweiligen Implementierung abhängig.

     Wenn ein Vaterprozeß beendet wird, ohne auf die Beendigung aller sei-
     ner Sohnprozesse zu warten, wird den noch verbleibenden Sohnprozessen
     eine neue Vaterprozeß-ID zugeordnet, die einem von der Implementierung
     abhängigen Systemprozeß entspricht.

RÜCKGABEWERT
     Wenn wait() oder waitpid() zurückkehren, weil der Status eines Sohn-
     prozesses verfügbar ist, geben diese Funktionen einen Wert zurück, der
     der Prozeß-ID des Sohnprozesses entspricht, für den der Status zurück-
     gegeben wurde. Kehren wait() oder waitpid() aufgrund der Auslieferung
     eines Signals an den aufrufenden Prozeß zurück, wird -1 zurückgegeben
     und errno auf EINTR gesetzt. Wird waitpid() mit gesetztem Flag WNOHANG
     im Argument options aufgerufen, ist zumindest ein durch pid angegebe-
     ner Sohnprozeß vorhanden, für den kein Status verfügbar ist, und wenn
     für keinen der durch pid angegebenen Prozesse ein Status verfügbar
     ist, wird 0 zurückgegeben. Andernfalls wird (pidt)-1 zurückgegeben
     und errno zur Anzeige des Fehlers gesetzt.

FEHLER
     Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
     Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
     errno(5).

     Die Funktion wait() schlägt bei folgenden Bedingungen fehl:

     ECHILD    Der aufrufende Prozeß hat keine vorhandenen Sohnprozesse,
               auf die nicht gewartet wird.

     EINTR     Die Funktion wurde von einem Signal unterbrochen. Der Wert
               der Position, auf die statloc zeigt, ist nicht definiert.

     Die Funktion waitpid() kann bei folgenden Bedingungen fehlschlagen:

     ECHILD    Der durch pid angegebene Prozeß oder die Prozeßgruppe ist
               nicht vorhanden oder ist kein Sohnprozeß des aufrufenden
               Prozesses.

     EINTR     Die Funktion wurde von einem Signal unterbrochen. Der Wert
               der Position, auf die statloc zeigt, ist nicht definiert.

     EINVAL    Das Argument options ist ungültig.

SIEHE AUCH
     exec(2), exit(2), fork(2), pause(2), ptrace(2), signal(2), waitid(2),
     wait3(3), signal(5), types(5), wait(5), wstat(5).


Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026