Provided by: manpages-pl-dev_0.6-2_all bug

NAZWA

       wait, waitpid - oczekiwanie na zakończenie procesu

SKŁADNIA

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

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

OPIS

        Uwaga! To tłumaczenie może być nieaktualne!

       Funkcja  wait  zatrzymuje  wykonywanie bieżącego procesu aż do zakończenia procesu potomka
       lub aż  do  dostarczenia  sygnału  kończącego  bieżący  proces  lub  innego,  dla  którego
       wywoływana   jest  funkcja  obsługi  sygnału.  Jeśli  potomek  zakończył  działanie  przed
       wywołaniem tej  funkcji  (tak  zwany  proces-duch  -  "zombie"),  to  funkcja  kończy  się
       natychmiast. Wszelkie zasoby potomka są zwalniane.

       Funkcja  waitpid zawiesza wykonywanie bieżącego procesu dopóki potomek określony przez pid
       nie zakończy działania lub dopóki nie zostanie  dostarczony  sygnał,  którego  akcją  jest
       zakończenie  procesu  lub  wywołanie  funkcji obsługującej sygnały.  Jeśli potomek, podany
       jako pid, zakończył swoje  działanie  przed  wywołaniem  tej  funkcji  (tak  zwany  proces
       "zombie"), funkcja kończy się natychmiast. Wszelkie zasoby potomka są zwalnianie.

       Wartość pid może być:

       < -1   co  oznacza  oczekiwanie  na dowolny proces potomny, którego ID grupy procesów jest
              równy wartości bezwzględnej pid.

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

       0      co oznacza oczekiwanie na każdy proces potomny, którego ID grupy procesu jest równe
              ID grupy procesu wywołującego funkcję.

       > 0    oznacza oczekiwanie na potomka, którego ID procesu jest równy wartości pid.

       Wartość options jest sumą OR zera lub więcej spośród następujących stałych:

       WNOHANG
              oznacza natychmiastowy powrót z funkcji, jeśli potomek nie zakończył pracy.

       WUNTRACED
              oznacza zakończenie także dla zatrzymanych (ale nie śledzonych) procesów potomnych,
              których  stan  jeszcze  nie  został zgłoszony.  Stan śledzonych procesów potomnych,
              które zostały zatrzymane, jest udostępniany również bez tej opcji.

       (Poniższe opcje dotyczą wyłącznie Linuksa.)

       Jeśli status nie jest równe NULL, wait lub  waitpid  zapisuje  dane  o  stanie  w  buforze
       wskazywanym przez status.

       Stan  ten  można zanalizować następującymi makrami (makra te pobierają jako argument bufor
       stat (typu int), — nie wskaźnik do bufora!):

       WIFEXITED(status)
              jest niezerowe, jeśli potomek normalnie zakończył pracę.

       WEXITSTATUS(status)
              analizuje osiem najmniej znaczących bitów kodu powrotu zakończonego potomka,  które
              mogły  być  ustawione  jako  argument wywołania exit() lub jako argument instrukcji
              return w programie głównym. Makro to może być przetworzone, tylko  jeśli  WIFEXITED
              zwróciło wartość niezerową.

       WIFSIGNALED(status)
              zwraca  prawdę,  jeśli  proces  potomny  zakończył pracę z powodu nieprzechwyconego
              sygnału.

       WTERMSIG(status)
              zwraca numer sygnału, który spowodował zakończenie procesu potomnego. Makro to może
              być przetworzone, tylko jeśli WIFSIGNALED zwróciło wartość niezerową.

       WIFSTOPPED(status)
              zwraca  prawdę, jeśli proces potomny jest obecnie zatrzymany; jest to możliwe tylko
              gdy w wywołaniu użyto WUNTRACED oraz  gdy  proces  potomny  jest  śledzony  (zobacz
              ptrace(2)).

       WSTOPSIG(status)
              zwraca  numer  sygnału,  który  spowodował  zatrzymanie  potomka. Makro to może być
              przetworzone, tylko jeśli WIFSTOPPED zwróciło wartość niezerową.

       Niektóre wersje Uniksa (np. Linux, Solaris, ale nie  AIX,  SunOS)  definiują  także  makro
       WCOREDUMP(status)  sprawdzające,  czy  proces  potomny  dokonał  zrzutu pamięci. Należy go
       używać tylko pomiędzy dyrektywami kompilatora #ifdef WCOREDUMP ... #endif.

WARTOŚĆ ZWRACANA

       PID zakończonego potomka lub zero, jeśli użyto WNOHANG,  a  nie  było  dostępnego  żadnego
       potomka,  albo  -1  w  przypadku  błędu  (w  tym ostatnim wypadku odpowiednia wartość jest
       nadawana errno).

BŁĘDY

       ECHILD jeśli  proces  o  zadanym  pid  nie  istnieje  lub  nie  jest   potomkiem   procesu
              wywołującego. (Może się to zdarzyć również w przypadku potomka, który ustawił akcję
              obsługi sygnału SIGCHLD na SIG_IGN. Zobacz także: wątki w sekcji UWAGI LINUKSOWE.)

       EINVAL jeśli argument options jest niepoprawny.

       EINTR  jeśli WNOHANG nie było ustawione, a został przechwycony niezablokowany  sygnał  lub
              SIGCHLD.

UWAGI

       Specyfikacja  Single  Unix Specification opisuje znacznik SA_NOCLDWAIT (nieobsługiwany pod
       Linuksem) taki, że jeżeli  jest  ustawiony  ten  znacznik  albo  akcja  dla  SIGCHLD  jest
       ustawiona  na  SIG_IGN,  to procesy potomne po zakończeniu nie stają się procesami-duchami
       ("zombies") i wywołanie funkcji wait()  lub  waitpid()  zablokuje  proces  do  czasu,  gdy
       wszystkie  procesy  potomne  zakończą  działanie,  a następnie zakończy się błędem z errno
       ustawionym na ECHILD.

       Oryginalny standard POSIX  nie  określa  zachowania  w  przypadku  ustawienia  SIGCHLD  na
       SIG_IGN.  Późniejsze standardy, włączając SUSv2 i POSIX 1003.1-2001 określają zachowanie w
       sposób taki, jaki opisano w opcji zgodności z XSI. Linux nie spełnia tego drugiego w dwóch
       opisanych  powyżej  punktach:  jeśli  wywołanie  wait()  lub  waitpid()  jest wykonywane z
       ignorowaniem SIGCHLD, zachowuje się ono tak, jakby SIGCHLD nie były ignorowane, to znaczy,
       wywołanie zostaje zablokowane do chwili zakończenia następnego potomka, a następnie zwraca
       PID i kod powrotu tego potomka.

UWAGI LINUKSOWE

       Pod Linuksem, wątek zarządzany przez jądro nie jest uruchamiany inaczej niż zwykły proces.
       Zamiast  tego wątek jest po prostu procesem stworzonym przez wywołanie dostępnej tylko pod
       Linuksem  funkcji  systemowej  clone(2).   Inne  funkcje,  jak   na   przykład   przenośne
       pthread_create(3)  są  zaimplementowane  przez  wywołania  funkcji  clone(2).   W wersjach
       Linuksa poprzedzających 2.4, wątek był  po  prostu  specyficznym  przypadkiem  procesu.  W
       związku z tym nie mógł on czekać na potomków innego wątku nawet w przypadku, gdy ten drugi
       wątek należał do tej samej grupy wątków. Jednakże, POSIX zaleca taką funkcjonalność,  więc
       począwszy  od Linuksa 2.4 wątek może (i domyślnie będzie) czekać na potomków innych wątków
       należących do tej samej grupy wątków.

       Następujące, specyficzne  dla  Linuksa  opcje  w  options  są  przeznaczone  dla  potomków
       utworzonych za pomocą clone(2).

       __WCLONE
              Oczekiwanie  tylko  na  potomków  typu  "clone".  Jeśli opcja ta zostanie pominięta
              będzie oczekiwanie tylko na potomków typu "nie-clone".  (Potomek  typu  "clone"  to
              taki,  który  po  zakończeniu nie dostarcza swojemu procesowi macierzystemu sygnału
              lub dostarcza sygnał inny niż SIGCHLD.)  Opcja ta jest ignorowana, jeśli  ustawiona
              jest również opcja __WALL.

       __WALL (Począwszy  od  Linuksa 2.4) Oczekiwanie na procesy potomne niezależnie od ich typu
              ("clone" lub "non-clone").

       __WNOTHREAD
              (Począwszy od Linuksa 2.4) Nie oczekiwać na procesy potomne innych wątków w obrębie
              tej samej grupy wątków. Było to w Linuksie domyślne przed wersją 2.4.

ZGODNE Z

       SVr4, POSIX.1

ZOBACZ TAKŻE

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

INFORMACJE O TŁUMACZENIU

       Powyższe  tłumaczenie  pochodzi  z nieistniejącego już Projektu Tłumaczenia Manuali i może
       nie być aktualne. W  razie  zauważenia  różnic  między  powyższym  opisem  a  rzeczywistym
       zachowaniem  opisywanego  programu  lub  funkcji,  prosimy  o  zapoznanie się z oryginalną
       (angielską) wersją strony podręcznika za pomocą polecenia:

              man --locale=C 2 wait

       Prosimy o pomoc w aktualizacji stron man - więcej informacji  można  znaleźć  pod  adresem
       http://sourceforge.net/projects/manpages-pl/.