Linguaggio C - wait(), waitpid()

NOME

wait(), waitpid() - attende il termine di un processo

SINOPSI

#include <sys/types.h> #include <sys/wait.h> pid_t wait(int *status) pid_t waitpid(pid_t pid, int *status, int options);

DESCRIZIONE

La funzione wait() sospende il processo corrente finche' un figlio (child) termina o finche' il processo corrente riceve un segnale di terminazione o un segnale che sia gestito da una funzione.
Quando un child termina il processo, senza che il parent abbia atteso la sua terminazione attraverso la funzione di wait(), allora il child assume lo stato di "zombie" ossia di processo "defunto".
Se il processo corrente esegue la funzione di wait(), mentre ci sono uno o piu' child in stato di zombie, allora la funzione ritorna immediatamente e ciascuna risorsa del child viene liberata.

La funzione waitpid() sospende il processo corrente finche' il figlio (child) corrispobndente al pid passato in argomento termina o finche' il processo corrente riceve un segnale di terminazione o un segnale che sia gestito da una funzione.
Se il processo corrente esegue la funzione di waitpid() e il child identificato dal pid e' in stato di zombie, allora la funzione ritorna immediatamente e ciascuna risorsa del child viene liberata.

Il valore del pid puo' essere uno dei seguenti:
< -1 la funzione attende ciascun child avente il process group ID uguale al valore assoluto del pid.
-1 la funzione attende ciascun child analogamente alla funzione wait().
0 la funzione attende ciascun child avente il process group ID uguale a quello del processo corrente.
> 0 la funzione attende il child avente il process ID corrispondente al valore del pid.

Se status non e' NULL, le funzioni wait() e waitpid() memorizzano l'informazione dello stato nell'area di memoria puntata da questo argomento.
Sono disponibili alcune macro per la valutazione dello stato status:

WIFEXITED(status)
risulta vera (diversa da zero) se il child e' uscito normalmente.
WEXITSTATUS(status)
riporta gli 8 bit meno significativi del codice di ritorno del child.
Il child puo' comunicare il codice di ritorno al parent, con l'argomento passato alla funzione _exit() o exit() o nello statement return della funzione main().
Questa macro puo' essere valutata solamente se la macro WIFEXITED e' risultata vera (diversa da zero).
WIFSIGNALED(status)
risulta vera (diversa da zero) se il child e' uscito per mezzo di un segnale non gestito.
WTERMSIG(status)
riporta il segnale (il suo numero) che ha causato il termine del processo figlio.
Questa macro puo' essere valutata solamente se la macro WIFSIGNALED e' risultata vera (diversa da zero).
WIFSTOPPED(status)
risulta vera (diversa da zero) se il child e' fermo (stop).
Questa possibilita' e' condizionata dall'impiego del flag WUNTRACED nell'argomento delle options.
WSTOPSIG(status)
ritorna il numero del segnale che ha causato il child a fermarsi (stop). Questa macro puo' essere valutata solamente se la macro WIFSTOPPED e' risultata vera (diversa da zero).

Il paramentro options puo' valere zero o puo' essere in OR con i seguenti valori costanti:
WNOHANG specifica il ritorno immediato se i child non sono usciti.
WUNTRACED specifica di ritornare anche se i child sono fermati (stop), e lo stato non deve venire riportato.

VALORE DI RITORNO

In caso di successo le funzioni wait() e waitpid() ritornano il process ID del child che termina.
Tornano -1 in caso di errore e errno viene settato in modo appropriato.
waitpid() torna 0 se e' stato impiegato WNOHANG e non ci sono figli che hanno terminato.

CONFORME A

SVr4, POSIX.1

VEDI ANCHE

execve() _exit() exit() fork() system()


Indice-C Indice linguaggio C
Indice librerie Indice librerie C
At Home Umberto Zappi Home Page
Indice funzioni Indice funzioni C