wait4

Autres langues

Langue: pl

Autres versions - même langue

Version: 1997-06-23 (openSuse - 09/10/07)

Section: 2 (Appels système)

NAZWA

wait3, wait4 - oczekiwanie na zakoñczenie procesu (styl BSD)

SK£ADNIA


#include <sys/types.h>

#include <sys/time.h>

#include <sys/resource.h>

#include <sys/wait.h>



pid_t wait3(int *status, int opcje,

      struct rusage *ruzycie);



pid_t wait4(pid_t pid, int *status, int opcje,

      struct rusage *ruzycie);

OPIS

Funkcja wait3 zawiesza wykonywanie bie¿±cego procesu a¿ jego potomek nie zakoñczy dzia³ania, lub a¿ nie zostanie dostarczony sygna³, którego akcj± jest zakoñczenie bie¿±cego procesu lub wywo³anie funkcji obs³ugi sygna³u. Je¶li potomek zakoñczy³ dzia³anie przed wywo³aniem tej funkcji (tzw. "zombie" - proces duch), zakoñczy ona dzia³anie natychmiast. Wszelkie zasoby systemowe u¿ywane przez potomka s± zwalniane.

Funkcja wait4 zawiesza wykonywanie bie¿±cego procesu a¿ potomek, okre¶lony przez argument pid nie zakoñczy dzia³ania, lub a¿ nie zostanie dostarczony sygna³, którego akcj± jest zakoñczenie bie¿±cego procesu lub wywo³anie funkcji obs³ugi sygna³u. Je¶li potomek okre¶lony przez pid ju¿ zakoñczy³ dzia³anie (proces duch), funkcja koñczy dzia³anie natychmiast. Wszelkie zasoby systemowe u¿ywane przez potomka s± zwalniane.

Warto¶æ pid mo¿e byæ jednym z:

< -1
oznacza oczekiwanie na dowolnego potomka, którego identyfikator grupy procesów jest równy modu³owi warto¶ci pid.
-1
co oznacza oczekiwanie na dowolny proces potomny; jest to równowa¿ne wywo³aniu wait3.
0
oznacza oczekiwanie na dowolnego potomka, którego identyfikator grupy procesów jest równy identyfikatorowi procesu wo³aj±cego.
> 0
oznacza oczekiwanie na potomka, którego PID jest równy warto¶ci pid.

Warto¶æ argumentu opcje jest bitowym OR zera lub wiêcej spo¶ród nastêpuj±cych sta³ych:

WNOHANG
oznacza zwrócenie warto¶ci natychmiast w wypadku gdy nie ma potomka, na którego mo¿na by czekaæ.
WUNTRACED
oznacza równie¿ nieobs³ugiwanie zatrzymanych potomków oraz tych, których status nie zosta³ zg³oszony.

Je¶li status nie wynosi NULL, wait3 i wait4 zapisuj± w miejscu wskazywanym przez status informacje o stanie.

Stan ten mo¿e byæ okre¶lony za pomoc± nastêpuj±cych makr (pobieraj±cych jako argument bufor stanu (warto¶æ int), --- nie wska¼nik do tego bufora:

WIFEXITED(status)
jest niezerowe, gdy potomek zakoñczy³ pracê normalnie.
WEXITSTATUS(status)
wyra¿a ostatnich osiem znacz±cych bitów kodu powrotu zakoñczonego potomka (który móg³ byæ ustawiony jako argument funkcji exit lub jako argument instrukcji return w programie g³ównym. Makro to mo¿e byæ przetwarzane tylko je¶li WIFEXITED zwróci³o warto¶æ niezerow±.
WIFSIGNALED(status)
zwraca prawdê, je¶li potomek zakoñczy³ dzia³anie z powodu nieprzechwyconego sygna³u.
WTERMSIG(status)
zwraca numer sygna³u, który spowodowa³ zakoñczenie procesu potomnego. Makro to mo¿e byæ wyliczane tylko po zwróceniu przez WIFSIGNALED warto¶ci niezerowej.
WIFSTOPPED(status)
zwraca prawdê, je¶li proces potomny, który spowodowa³ wyj¶cie jest obecnie zatrzymany. Jest to mo¿liwe tylko je¶li wywo³anie wykonano z u¿yciem WUNTRACED.
WSTOPSIG(status)
zwraca numer sygna³u, który spowodowa³ zatrzymanie potomka. Makro to mo¿e byæ wyliczane tylko po zwróceniu przez WIFSTOPPED warto¶ci niezerowej.

Je¶li ruzycie nie jest równe NULL, zdefiniowana w <sys/resource.h> struktura struct rusage, na któr± ruzycie wskazuje, zostanie wype³niona informacjami o wykorzystywaniu zasobów. Szczegó³y znajduj± siê w getrusage(2).

WARTO¦Æ ZWRACANA

Identyfikator zakoñczonego procesu lub -1 w przypadku b³êdu (w szczególno¶ci, gdy nie istnieje proces potomny zadanego rodzaju, na który mo¿na by oczekiwaæ), lub zero je¶li u¿yto WNOHANG i nie by³ dostêpny ¿aden potomek. W ostatnich dwóch przypadkach zostanie odpowiednio ustawione errno.

B£ÊDY

ECHILD
Nie istnieje ¿aden odpowiedni proces potomny, na który mo¿na by oczekiwaæ.
EINTR
Je¶li nie ustawiono WNOHANG a zosta³ przechwycony niezablokowany sygna³ lub SIGCHLD.

UWAGI

Do³±czenie <sys/time.h> nie jest obecnie wymagane, lecz zwiêksza przeno¶no¶æ. (Faktycznie, <sys/resource.h> zawiera definje struktury rusage z polami typu struct timeval zdefiniowanego w <sys/time.h>.)

Prototyp dla tych funkcji jest dostêpny jedynie, gdy zdefiniowano _BSD_SOURCE (jawnie lub po¶rednio, nie definiuj±c _POSIX_SOURCE lub kompiluj±c z opcj± -ansi).

ZGODNE Z

SVr4, POSIX.1

ZOBACZ TAK¯E

signal(2), getrusage(2), wait(2), signal(7)