Provided by: manpages-pl-dev_20060617-3_all bug

NAZWA

       wait, waitpid - oczekiwanie na zakoczenie procesu

SK/LADNIA

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

       pid_t wait(int *status);
       pid_t waitpid(pid_t pid, int *status, int options);

OPIS

       Funkcja  wait  zatrzymuje  wykonywanie  biecego procesu a do zakoczenia
       procesu potomka lub a do dostarczenia sygnalu koczcego biecy proces lub
       innego,  dla  ktorego  wywolywana  jest  funkcja  obslugi sygnalu. Jeli
       potomek zakoczyl dzialanie przed  wywolaniem  tej  funkcji  (tak  zwany
       proces-duch  -  "zombie"),  to  funkcja  koczy si natychmiast. Wszelkie
       zasoby potomka s zwalniane.

       Funkcja waitpid zawiesza wykonywanie  biecego  procesu  dopoki  potomek
       okrelony  przez  pid  nie  zakoczy  dzialania  lub  dopoki nie zostanie
       dostarczony sygnal, ktorego akcj jest zakoczenie procesu lub  wywolanie
       funkcji  obslugujcej  sygnaly.  Jeli potomek, podany jako pid, zakoczyl
       swoje  dzialanie  przed  wywolaniem  tej  funkcji  (tak  zwany   proces
       "zombie"),  funkcja  koczy  si  natychmiast.  Wszelkie zasoby potomka s
       zwalnianie.

       Warto pid moe by:

       < -1   co oznacza oczekiwanie na dowolny  proces  potomny,  ktorego  ID
              grupy procesow jest rowny wartoci bezwzgldnej pid.

       -1     co  oznacza oczekiwanie na dowolny proces potomny; jest to takie
              samo zachowanie, jakie wykazuje wait.

       0      co oznacza oczekiwanie na kady proces potomny, ktorego ID  grupy
              procesu jest rowne ID grupy procesu wywolujcego funkcj.

       > 0    oznacza  oczekiwanie  na  potomka, ktorego ID procesu jest rowny
              wartoci pid.

       Warto options jest sum OR zera lub wicej sporod nastpujcych stalych:

       WNOHANG
              oznacza  natychmiastowy  powrot  z  funkcji,  jeli  potomek  nie
              zakoczyl pracy.

       WUNTRACED
              oznacza  zakoczenie  take  dla  zatrzymanych (ale nie ledzonych)
              procesow potomnych, ktorych stan jeszcze nie  zostal  zgloszony.
              Stan  ledzonych  procesow  potomnych,  ktore zostaly zatrzymane,
              jest udostpniany rownie bez tej opcji.

       (Ponisze opcje dotycz wylcznie Linuksa.)

       Jeli status nie jest rowne NULL,  wait  lub  waitpid  zapisuje  dane  o
       stanie w buforze wskazywanym przez status.

       Stan  ten  mona  zanalizowa nastpujcymi makrami (makra te pobieraj jako
       argument bufor stat (typu int), -- nie wskanik do bufora!):

       WIFEXITED(status)
              jest niezerowe, jeli potomek normalnie zakoczyl prac.

       WEXITSTATUS(status)
              analizuje  osiem   najmniej   znaczcych   bitow   kodu   powrotu
              zakoczonego  potomka,  ktore  mogly  by  ustawione jako argument
              wywolania exit() lub jako argument instrukcji return w programie
              glownym.  Makro  to  moe  by  przetworzone, tylko jeli WIFEXITED
              zwrocilo warto niezerow.

       WIFSIGNALED(status)
              zwraca  prawd,  jeli  proces  potomny  zakoczyl  prac  z  powodu
              nieprzechwyconego sygnalu.

       WTERMSIG(status)
              zwraca   numer  sygnalu,  ktory  spowodowal  zakoczenie  procesu
              potomnego. Makro to moe by przetworzone, tylko jeli  WIFSIGNALED
              zwrocilo warto niezerow.

       WIFSTOPPED(status)
              zwraca  prawd, jeli proces potomny jest obecnie zatrzymany; jest
              to moliwe tylko gdy w wywolaniu uyto WUNTRACED oraz  gdy  proces
              potomny jest ledzony (zobacz ptrace(2)).

       WSTOPSIG(status)
              zwraca  numer  sygnalu,  ktory  spowodowal  zatrzymanie potomka.
              Makro to moe by przetworzone,  tylko  jeli  WIFSTOPPED  zwrocilo
              warto niezerow.

       Niektore  wersje  Uniksa  (np.  Linux,  Solaris,  ale  nie  AIX, SunOS)
       definiuj take makro WCOREDUMP(status) sprawdzajce, czy  proces  potomny
       dokonal   zrzutu  pamici.  Naley  go  uywa  tylko  pomidzy  dyrektywami
       kompilatora #ifdef WCOREDUMP ... #endif.

WARTO ZWRACANA

       PID zakoczonego potomka  lub  zero,  jeli  uyto  WNOHANG,  a  nie  bylo
       dostpnego  adnego  potomka,  albo  -1  w przypadku bldu (w tym ostatnim
       wypadku odpowiednia warto jest nadawana errno).

B/LDY

       ECHILD jeli proces o zadanym pid nie istnieje lub  nie  jest  potomkiem
              procesu  wywolujcego.  (Moe  si  to  zdarzy  rownie  w przypadku
              potomka, ktory ustawil akcj obslugi sygnalu SIGCHLD na  SIG_IGN.
              Zobacz take: wtki w sekcji UWAGI LINUKSOWE.)

       EINVAL jeli argument options jest niepoprawny.

       EINTR  jeli   WNOHANG   nie   bylo  ustawione,  a  zostal  przechwycony
              niezablokowany sygnal lub SIGCHLD.

UWAGI

       Specyfikacja Single Unix Specification  opisuje  znacznik  SA_NOCLDWAIT
       (nieobslugiwany pod Linuksem) taki, e jeeli jest ustawiony ten znacznik
       albo akcja dla SIGCHLD jest ustawiona na SIG_IGN, to procesy potomne po
       zakoczeniu  nie  staj  si  procesami-duchami  ("zombies")  i  wywolanie
       funkcji wait() lub waitpid() zablokuje proces do czasu,  gdy  wszystkie
       procesy  potomne  zakocz dzialanie, a nastpnie zakoczy si bldem z errno
       ustawionym na ECHILD.

       Oryginalny standard POSIX nie okrela zachowania w przypadku  ustawienia
       SIGCHLD   na  SIG_IGN.  Poniejsze  standardy,  wlczajc  SUSv2  i  POSIX
       1003.1-2001 okrelaj zachowanie w sposob  taki,  jaki  opisano  w  opcji
       zgodnoci  z  XSI.  Linux  nie  spelnia  tego drugiego w dwoch opisanych
       powyej punktach: jeli wywolanie wait() lub waitpid() jest wykonywane  z
       ignorowaniem  SIGCHLD,  zachowuje  si  ono  tak, jakby SIGCHLD nie byly
       ignorowane,  to  znaczy,  wywolanie  zostaje  zablokowane   do   chwili
       zakoczenia  nastpnego potomka, a nastpnie zwraca PID i kod powrotu tego
       potomka.

UWAGI LINUKSOWE

       Pod Linuksem, wtek zarzdzany przez jdro nie jest uruchamiany inaczej ni
       zwykly  proces.  Zamiast  tego  wtek jest po prostu procesem stworzonym
       przez  wywolanie  dostpnej  tylko  pod  Linuksem   funkcji   systemowej
       clone(2).   Inne  funkcje, jak na przyklad przenone pthread_create(3) s
       zaimplementowane przez wywolania funkcji clone(2).  W wersjach  Linuksa
       poprzedzajcych   2.4,  wtek  byl  po  prostu  specyficznym  przypadkiem
       procesu. W zwizku z tym nie mogl on czeka na potomkow innego wtku nawet
       w  przypadku,  gdy  ten  drugi  wtek  naleal  do tej samej grupy wtkow.
       Jednake, POSIX zaleca tak funkcjonalno, wic  poczwszy  od  Linuksa  2.4
       wtek  moe (i domylnie bdzie) czeka na potomkow innych wtkow nalecych do
       tej samej grupy wtkow.

       Nastpujce, specyficzne dla Linuksa opcje w options s  przeznaczone  dla
       potomkow utworzonych za pomoc clone(2).

       __WCLONE
              Oczekiwanie  tylko  na  potomkow  typu  "clone".  Jeli  opcja ta
              zostanie pominita bdzie oczekiwanie tylko na potomkow typu "nie-
              clone".  (Potomek  typu "clone" to taki, ktory po zakoczeniu nie
              dostarcza swojemu procesowi macierzystemu sygnalu lub  dostarcza
              sygnal  inny  ni  SIGCHLD.)   Opcja  ta  jest  ignorowana,  jeli
              ustawiona jest rownie opcja __WALL.

       __WALL (Poczwszy  od  Linuksa  2.4)  Oczekiwanie  na  procesy   potomne
              niezalenie od ich typu ("clone" lub "non-clone").

       __WNOTHREAD
              (Poczwszy od Linuksa 2.4) Nie oczekiwa na procesy potomne innych
              wtkow w obrbie tej samej grupy wtkow. Bylo to w Linuksie domylne
              przed wersj 2.4.

ZGODNE Z

       SVr4, POSIX.1

ZOBACZ TAKE

       clone(2), ptrace(2), signal(2), wait4(2), pthread_create(3), signal(7)

INFORMACJE O T/LUMACZENIU

       Powysze  tlumaczenie  pochodzi z nieistniejcego ju Projektu Tlumaczenia
       Manuali i moe nie by aktualne. W razie zauwaenia ronic  midzy  powyszym
       opisem  a  rzeczywistym  zachowaniem  opisywanego programu lub funkcji,
       prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.