Si passa agli esempi
authorSimone Piccardi <piccardi@gnulinux.it>
Thu, 7 Mar 2002 00:30:56 +0000 (00:30 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Thu, 7 Mar 2002 00:30:56 +0000 (00:30 +0000)
signal.tex

index bdb1edb5509541e6d28ebc8b326a7157a11a12d9..bfacf64b642354ca7d488b2dda271551c3683cc1 100644 (file)
@@ -1254,15 +1254,52 @@ tempo lo standard POSIX.1 definisce la funzione \func{sleep}, il cui prototipo
   
   Pone il processo in stato di sleep per \param{seconds} secondi.
   
   
   Pone il processo in stato di sleep per \param{seconds} secondi.
   
-  \bodydesc{}
+  \bodydesc{La funzione restituisce zero se l'attesa viene completata, o il
+  numero di secondi restanti se viene interrotta da un segnale.}
 \end{prototype}
 
 \end{prototype}
 
+La funzione attende per il tempo specificato, a meno di non essere interrotta
+da un segnale. In questo caso non è una buona idea ripetere la chiamata per il
+tempo rimanente, in quanto la riattivazione del processo può avvenire in un
+qualunque momento, ma il valore restituito sarà sempre arrotondato al secondo,
+con la conseguenza che, se la successione dei segnali è particolarmente
+sfortunata, si potranno avere ritardi anche di parecchi secondi. In genere la
+scelta più sicura è quella di stabilire un termine per l'attesa, e ricalcolare
+tutte le volte il numero di secondi da aspettare.
 
 
+In alcune implementazioni inoltre l'uso di \func{sleep} può avere conflitti
+con quello di \macro{SIGALRM}, dato che la funzione può essere realizzata
+attraverso \func{pause} e \func{alarm} (in maniera analoga all'esempio che
+vedremo fra poco). In tal caso mescolare chiamata di \func{alarm} e
+\func{sleep} o modificare l'azione di \macro{SIGALRM}, può causare risultati
+indefiniti. Nel caso delle \acr{glibc} è stata usata una implementazione
+completamente indipendente e questi problemi non ci sono.
 
 
+La granularità di \func{sleep} è 
 
 
-\subsection{Le semantiche di \macro{SIGCHLD}}
+
+
+Come accennato è possibile implementare \func{sleep} a partire da dall'uso di
+\func{pause} e \func{alarm}; 
+
+
+\subsection{La gestione di \macro{SIGCHLD}}
 \label{sec:sig_sigchld}
 
 \label{sec:sig_sigchld}
 
+Un semplice esempio per illustrare il funzionamento di un manipolatore di
+segnale è quello della gestione di \macro{SIGCHLD}.  Abbiamo visto in
+\secref{sec:proc_termination} che una delle azioni eseguite dal kernel alla
+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
+  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
+  e POSIX, non supporta questa semantica ed usa il nome di \macro{SIGCLD} come
+  sinonimo di \macro{SIGCHLD}.} è pertanto naturale completare qui la
+trattazione della terminazione dei processi illustrando le modalità per
+gestire questo segnale.