Provided by:
manpages-pl-dev_20060617-3_all 
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.