focal (2) waitid.2.gz

Provided by: manpages-pl-dev_0.7-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/.