From: Simone Piccardi Date: Thu, 7 Mar 2002 22:21:55 +0000 (+0000) Subject: Altre funzioni di attesa, un po' meglio del while(1) ... X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=commitdiff_plain;h=0c63d62732e14ab73d5f1f0a0e5d70f3873bc334 Altre funzioni di attesa, un po' meglio del while(1) ... --- diff --git a/signal.tex b/signal.tex index bfacf64..c2345f0 100644 --- a/signal.tex +++ b/signal.tex @@ -1275,12 +1275,36 @@ vedremo fra poco). In tal caso mescolare chiamata di \func{alarm} e indefiniti. Nel caso delle \acr{glibc} è stata usata una implementazione completamente indipendente e questi problemi non ci sono. -La granularità di \func{sleep} è +La granularità di \func{sleep} permette di specificare attese in secondi, per +questo sia sotto BSD4.3 che in SUSv2 è stata definita la funzione +\func{usleep} (dove la \texttt{u} è intesa come sostituzione di $\mu$); i due +standard hanno delle definizioni diverse, ma le \acr{glibc} +seguono\footnote{secondo la man page almeno dalla versione 2.2.2.} seguono +quella di SUSv2 che prevede il seguente prototipo: +\begin{prototype}{unistd.h}{int usleep(unsigned long usec)} + + Pone il processo in stato di sleep per \param{usec} microsecondi. + + \bodydesc{La funzione restituisce zero se l'attesa viene completata, o -1 in + caso di errore, nel qual caso \var{errno} è settata a \macro{EINTR}.} + +\end{prototype} + +Anche questa funzione può presentare problemi nell'interazione con +\func{alarm} e \macro{SIGALRM}, ed è pertanto deprecata in favore di +\func{nanosleep}, definita dallo standard POSIX1.b, il cui prototipo è: +\begin{prototype}{unistd.h}{int nanosleep(const struct timespec *req, struct + timespec *rem)} + + Pone il processo in stato di sleep per il tempo specificato da \param{req}. + + \bodydesc{La funzione restituisce zero se l'attesa viene completata, o -1 in + caso di errore, nel qual caso \var{errno} è settata a \macro{EINVAL} o + \macro{EINTR}.} +\end{prototype} -Come accennato è possibile implementare \func{sleep} a partire da dall'uso di -\func{pause} e \func{alarm}; \subsection{La gestione di \macro{SIGCHLD}} @@ -1292,7 +1316,7 @@ segnale conclusione di un processo è quella di inviare questo segnale al padre;\footnote{in realtà in SRV4 eredita la semantica di System V, in cui il segnale si chiama \macro{SIGCLD} e viene trattato in maniera speciale; se si - setta esplicitamente l'azione a \macro{SIG_IGN} il segnale non viene + setta esplicitamente l'azione a \macro{SIG\_IGN} il segnale non viene generato ed il sistema non genera zombie (lo stato di terminazione viene scartato senza dover chiamare una wait), l'azione di default è sempre quella di ignorare il segnale, ma non attiva questo comportamento. Linux, come BSD @@ -1307,6 +1331,12 @@ gestire questo segnale. \label{sec:sig_control} +\subsection{Un esempio di problema} +\label{sec:sig_example} + +Come accennato è possibile implementare \func{sleep} a partire da dall'uso di +\func{pause} e \func{alarm}; + \subsection{Le funzioni \func{sigprocmask} e \func{sigpending}}