Altre indicizzazioni, e correzione delle parole.
[gapil.git] / signal.tex
index aa47a4dc18514364b4fc05abe80f633cf14761f4..17101bfa58fff122f47400b4db1dd16c1e56e24d 100644 (file)
@@ -68,7 +68,7 @@ dall'utente o da un altro processo) comporta l'intervento diretto da parte del
 kernel che causa la generazione di un particolare tipo di segnale.
 
 Quando un processo riceve un segnale, invece del normale corso del programma,
-viene eseguita una azione predefinita o una apposita routine di gestione
+viene eseguita una azione predefinita o una apposita funzione di gestione
 (quello che da qui in avanti chiameremo il \textsl{gestore} del segnale,
 dall'inglese \textit{signal handler}) che può essere stata specificata
 dall'utente (nel qual caso si dice che si \textsl{intercetta} il segnale).
@@ -85,7 +85,7 @@ individuare due tipologie fondamentali di comportamento dei segnali (dette
 \textit{unreliable}).
 
 Nella \textsl{semantica inaffidabile} (quella implementata dalle prime
-versioni di Unix) la routine di gestione del segnale specificata dall'utente
+versioni di Unix) la funzione di gestione del segnale specificata dall'utente
 non resta attiva una volta che è stata eseguita; è perciò compito dell'utente
 stesso ripetere l'installazione all'interno del \textsl{gestore} del segnale,
 in tutti quei casi in cui si vuole che esso resti attivo.
@@ -305,8 +305,8 @@ definiti in vari standard.
     \hline
     A & L'azione predefinita è terminare il processo. \\
     B & L'azione predefinita è ignorare il segnale. \\
-    C & L'azione predefinita è terminare il processo e scrivere un \textit{core
-        dump}. \\
+    C & L'azione predefinita è terminare il processo e scrivere un 
+        \itindex{core~dump} \textit{core dump}. \\
     D & L'azione predefinita è fermare il processo. \\
     E & Il segnale non può essere intercettato. \\
     F & Il segnale non può essere ignorato.\\
@@ -360,49 +360,50 @@ momento della ricezione del segnale.
     \hline
     \hline
     \const{SIGHUP}   &PL & A & Hangup o terminazione del processo di 
-                               controllo                                     \\
-    \const{SIGINT}   &PL & A & Interrupt da tastiera (\cmd{C-c})             \\
-    \const{SIGQUIT}  &PL & C & Quit da tastiera (\cmd{C-y})                  \\
-    \const{SIGILL}   &PL & C & Istruzione illecita                           \\
-    \const{SIGABRT}  &PL & C & Segnale di abort da \func{abort}              \\
-    \const{SIGFPE}   &PL & C & Errore aritmetico                             \\
-    \const{SIGKILL}  &PL &AEF& Segnale di terminazione forzata               \\
-    \const{SIGSEGV}  &PL & C & Errore di accesso in memoria                  \\
-    \const{SIGPIPE}  &PL & A & Pipe spezzata                                 \\
-    \const{SIGALRM}  &PL & A & Segnale del timer da \func{alarm}             \\
-    \const{SIGTERM}  &PL & A & Segnale di terminazione \verb|C-\|            \\
-    \const{SIGUSR1}  &PL & A & Segnale utente numero 1                       \\
-    \const{SIGUSR2}  &PL & A & Segnale utente numero 2                       \\
-    \const{SIGCHLD}  &PL & B & Figlio terminato o fermato                    \\
-    \const{SIGCONT}  &PL &   & Continua se fermato                           \\
-    \const{SIGSTOP}  &PL &DEF& Ferma il processo                             \\
-    \const{SIGTSTP}  &PL & D & Pressione del tasto di stop sul terminale     \\
+                               controllo.                                    \\
+    \const{SIGINT}   &PL & A & Interrupt da tastiera (\cmd{C-c}).            \\
+    \const{SIGQUIT}  &PL & C & Quit da tastiera (\cmd{C-y}).                 \\
+    \const{SIGILL}   &PL & C & Istruzione illecita.                          \\
+    \const{SIGABRT}  &PL & C & Segnale di abort da \func{abort}.             \\
+    \const{SIGFPE}   &PL & C & Errore aritmetico.                            \\
+    \const{SIGKILL}  &PL &AEF& Segnale di terminazione forzata.              \\
+    \const{SIGSEGV}  &PL & C & Errore di accesso in memoria.                 \\
+    \const{SIGPIPE}  &PL & A & Pipe spezzata.                                \\
+    \const{SIGALRM}  &PL & A & Segnale del timer da \func{alarm}.            \\
+    \const{SIGTERM}  &PL & A & Segnale di terminazione \texttt{C-\bslash}.   \\
+    \const{SIGUSR1}  &PL & A & Segnale utente numero 1.                      \\
+    \const{SIGUSR2}  &PL & A & Segnale utente numero 2.                      \\
+    \const{SIGCHLD}  &PL & B & Figlio terminato o fermato.                   \\
+    \const{SIGCONT}  &PL &   & Continua se fermato.                          \\
+    \const{SIGSTOP}  &PL &DEF& Ferma il processo.                            \\
+    \const{SIGTSTP}  &PL & D & Pressione del tasto di stop sul terminale.    \\
     \const{SIGTTIN}  &PL & D & Input sul terminale per un processo 
-                               in background                                 \\
+                               in background.                                \\
     \const{SIGTTOU}  &PL & D & Output sul terminale per un processo          
-                               in background                                 \\
-    \const{SIGBUS}   &SL & C & Errore sul bus (bad memory access)            \\
-    \const{SIGPOLL}  &SL & A & \textit{Pollable event} (Sys V).  
-                               Sinonimo di \const{SIGIO}                     \\
-    \const{SIGPROF}  &SL & A & Timer del profiling scaduto                   \\
-    \const{SIGSYS}   &SL & C & Argomento sbagliato per una subroutine (SVID) \\
-    \const{SIGTRAP}  &SL & C & Trappole per un Trace/breakpoint              \\
+                               in background.                                \\
+    \const{SIGBUS}   &SL & C & Errore sul bus (bad memory access).           \\
+    \const{SIGPOLL}  &SL & A & \textit{Pollable event} (Sys V);  
+                               Sinonimo di \const{SIGIO}.                    \\
+    \const{SIGPROF}  &SL & A & Timer del profiling scaduto.                  \\
+    \const{SIGSYS}   &SL & C & Argomento sbagliato per una subroutine (SVID).\\
+    \const{SIGTRAP}  &SL & C & Trappole per un Trace/breakpoint.             \\
     \const{SIGURG}   &SLB& B & Ricezione di una \textit{urgent condition} su 
-                               un socket\index{socket}\\
-    \const{SIGVTALRM}&SLB& A & Virtual alarm clock                           \\
-    \const{SIGXCPU}  &SLB& C & Ecceduto il limite sul CPU time               \\
-    \const{SIGXFSZ}  &SLB& C & Ecceduto il limite sulla dimensione dei file  \\
-    \const{SIGIOT}   &L  & C & IOT trap. Sinonimo di \const{SIGABRT}         \\
+                               un socket\index{socket}\\
+    \const{SIGVTALRM}&SLB& A & Virtual alarm clock.                          \\
+    \const{SIGXCPU}  &SLB& C & Ecceduto il limite sul tempo di CPU.          \\
+    \const{SIGXFSZ}  &SLB& C & Ecceduto il limite sulla dimensione dei file. \\
+    \const{SIGIOT}   &L  & C & IOT trap. Sinonimo di \const{SIGABRT}.        \\
     \const{SIGEMT}   &L  &   &                                               \\
-    \const{SIGSTKFLT}&L  & A & Errore sullo stack del coprocessore           \\
-    \const{SIGIO}    &LB & A & L'I/O è possibile (4.2 BSD)                   \\
-    \const{SIGCLD}   &L  &   & Sinonimo di \const{SIGCHLD}                   \\
-    \const{SIGPWR}   &L  & A & Fallimento dell'alimentazione                 \\
-    \const{SIGINFO}  &L  &   & Sinonimo di \const{SIGPWR}                    \\
-    \const{SIGLOST}  &L  & A & Perso un lock sul file (per NFS)              \\
-    \const{SIGWINCH} &LB & B & Finestra ridimensionata (4.3 BSD, Sun)        \\
+% TODO che roba e` SIGEMT
+    \const{SIGSTKFLT}&L  & A & Errore sullo stack del coprocessore.          \\
+    \const{SIGIO}    &LB & A & L'I/O è possibile (4.2 BSD).                  \\
+    \const{SIGCLD}   &L  &   & Sinonimo di \const{SIGCHLD}.                  \\
+    \const{SIGPWR}   &L  & A & Fallimento dell'alimentazione.                \\
+    \const{SIGINFO}  &L  &   & Sinonimo di \const{SIGPWR}.                   \\
+    \const{SIGLOST}  &L  & A & Perso un lock sul file (per NFS).             \\
+    \const{SIGWINCH} &LB & B & Finestra ridimensionata (4.3 BSD, Sun).       \\
     \const{SIGUNUSED}&L  & A & Segnale inutilizzato (diventerà 
-                               \const{SIGSYS})                               \\
+                               \const{SIGSYS}).                              \\
     \hline
   \end{tabular}
   \caption{Lista dei segnali in Linux.}
@@ -511,22 +512,26 @@ segnali sono:
   \const{SIGKILL} può essere intercettato, ignorato, bloccato. In genere lo si
   usa per chiedere in maniera ``\textsl{educata}'' ad un processo di
   concludersi.
+
 \item[\const{SIGINT}] Il nome sta per \textit{interrupt}. È il segnale di
   interruzione per il programma. È quello che viene generato di default dal
   comando \cmd{kill} o dall'invio sul terminale del carattere di controllo
   INTR (interrupt, generato dalla sequenza \cmd{C-c}).
-\item[\const{SIGQUIT}] È analogo a \const{SIGINT} con la differenza che è
-  controllato da un altro carattere di controllo, QUIT, corrispondente alla
-  sequenza \verb|C-\|. A differenza del precedente l'azione predefinita, oltre
-  alla terminazione del processo, comporta anche la creazione di un
+
+\item[\const{SIGQUIT}] È analogo a \const{SIGINT} con la differenza
+  che è controllato da un altro carattere di controllo, QUIT,
+  corrispondente alla sequenza \texttt{C-\bslash}. A differenza del
+  precedente l'azione predefinita, oltre alla terminazione del
+  processo, comporta anche la creazione di un
   \itindex{core~dump}\textit{core dump}.
 
-  In genere lo si può pensare come corrispondente ad una condizione di
-  errore del programma rilevata dall'utente. Per questo motivo non è opportuno
-  fare eseguire al gestore di questo segnale le operazioni di pulizia
-  normalmente previste (tipo la cancellazione di file temporanei), dato che in
-  certi casi esse possono eliminare informazioni utili nell'esame dei core
-  dump. 
+  In genere lo si può pensare come corrispondente ad una condizione di errore
+  del programma rilevata dall'utente. Per questo motivo non è opportuno fare
+  eseguire al gestore di questo segnale le operazioni di pulizia normalmente
+  previste (tipo la cancellazione di file temporanei), dato che in certi casi
+  esse possono eliminare informazioni utili nell'esame dei \textit{core dump}.
+  \itindex{core~dump}
+
 \item[\const{SIGKILL}] Il nome è utilizzato per terminare in maniera immediata
   qualunque programma. Questo segnale non può essere né intercettato, né
   ignorato, né bloccato, per cui causa comunque la terminazione del processo.
@@ -541,6 +546,7 @@ segnali sono:
   kernel). Talvolta è il sistema stesso che può generare questo segnale quando
   per condizioni particolari il processo non può più essere eseguito neanche
   per eseguire un gestore.
+
 \item[\const{SIGHUP}] Il nome sta per \textit{hang-up}. Segnala che il
   terminale dell'utente si è disconnesso (ad esempio perché si è interrotta la
   rete). Viene usato anche per riportare la terminazione del processo di
@@ -564,9 +570,11 @@ sempre la necessit
 \item[\const{SIGALRM}] Il nome sta per \textit{alarm}. Segnale la scadenza di
   un timer misurato sul tempo reale o sull'orologio di sistema. È normalmente
   usato dalla funzione \func{alarm}.
+
 \item[\const{SIGVTALRM}] Il nome sta per \textit{virtual alarm}. È analogo al
   precedente ma segnala la scadenza di un timer sul tempo di CPU usato dal
   processo. 
+
 \item[\const{SIGPROF}] Il nome sta per \textit{profiling}. Indica la scadenza
   di un timer che misura sia il tempo di CPU speso direttamente dal processo
   che quello che il sistema ha speso per conto di quest'ultimo. In genere
@@ -588,9 +596,11 @@ segnali sono:
   socket\index{socket} e i terminali possono generare questo segnale, in Linux
   questo può essere usato anche per i file, posto che la \func{fcntl} abbia
   avuto successo.
+
 \item[\const{SIGURG}] Questo segnale è inviato quando arrivano dei dati
   urgenti o \textit{out-of-band} su di un socket\index{socket}; per maggiori
   dettagli al proposito si veda sez.~\ref{sec:TCP_urgent_data}.
+
 \item[\const{SIGPOLL}] Questo segnale è equivalente a \const{SIGIO}, è
   definito solo per compatibilità con i sistemi System V.
 \end{basedescript}
@@ -606,8 +616,10 @@ in cui si trattano gli argomenti relativi.  Questi segnali sono:
 \item[\const{SIGCHLD}] Questo è il segnale mandato al processo padre quando un
   figlio termina o viene fermato. L'azione predefinita è di ignorare il
   segnale, la sua gestione è trattata in sez.~\ref{sec:proc_wait}.
+
 \item[\const{SIGCLD}] Per Linux questo è solo un segnale identico al
   precedente, il nome è obsoleto e andrebbe evitato. 
+
 \item[\const{SIGCONT}] Il nome sta per \textit{continue}. Il segnale viene
   usato per fare ripartire un programma precedentemente fermato da
   \const{SIGSTOP}. Questo segnale ha un comportamento speciale, e fa sempre
@@ -625,6 +637,7 @@ in cui si trattano gli argomenti relativi.  Questi segnali sono:
 \item[\const{SIGSTOP}] Il segnale ferma un processo (lo porta cioè in uno
   stato di sleep, vedi sez.~\ref{sec:proc_sched}); il segnale non può essere né
   intercettato, né ignorato, né bloccato.
+
 \item[\const{SIGTSTP}] Il nome sta per \textit{interactive stop}. Il segnale
   ferma il processo interattivamente, ed è generato dal carattere SUSP
   (prodotto dalla combinazione \cmd{C-z}), ed al contrario di
@@ -633,12 +646,14 @@ in cui si trattano gli argomenti relativi.  Questi segnali sono:
   o il terminale in uno stato definito prima di fermarsi; se per esempio un
   programma ha disabilitato l'eco sul terminale può installare un gestore
   per riabilitarlo prima di fermarsi.
+
 \item[\const{SIGTTIN}] Un processo non può leggere dal terminale se esegue una
   sessione di lavoro in \textit{background}. Quando un processo in background
   tenta di leggere da un terminale viene inviato questo segnale a tutti i
   processi della sessione di lavoro. L'azione predefinita è di fermare il
   processo.  L'argomento è trattato in
   sez.~\ref{sec:sess_job_control_overview}.
+
 \item[\const{SIGTTOU}] Segnale analogo al precedente \const{SIGTTIN}, ma
   generato quando si tenta di scrivere o modificare uno dei modi del
   terminale. L'azione predefinita è di fermare il processo, l'argomento è
@@ -1395,7 +1410,7 @@ gestore per \const{SIGCHLD} il cui unico compito sia quello di chiamare
 la formazione di zombie\index{zombie}.
 
 In fig.~\ref{fig:sig_sigchld_handl} è mostrato il codice contenente una
-implementazione generica di una routine di gestione per \const{SIGCHLD}, (che
+implementazione generica di una funzione di gestione per \const{SIGCHLD}, (che
 si trova nei sorgenti allegati nel file \file{SigHand.c}); se ripetiamo i test
 di sez.~\ref{sec:proc_termination}, invocando \cmd{forktest} con l'opzione
 \cmd{-s} (che si limita ad effettuare l'installazione di questa funzione come
@@ -1569,10 +1584,10 @@ segnale arriva immediatamente dopo l'esecuzione del controllo (\texttt{\small
 occorrenza sarà perduta.
 
 Questi esempi ci mostrano che per una gestione effettiva dei segnali occorrono
-funzioni più sofisticate di quelle illustrate finora, che hanno origine dalla
-interfaccia semplice, ma poco sofisticata, dei primi sistemi Unix, in modo da
-consentire la gestione di tutti i possibili aspetti con cui un processo deve
-reagire alla ricezione di un segnale.
+delle funzioni più sofisticate di quelle finora illustrate, queste hanno la
+loro origine nella semplice interfaccia dei primi sistemi Unix, ma con esse
+non è possibile gestire in maniera adeguata di tutti i possibili aspetti con
+cui un processo deve reagire alla ricezione di un segnale.
 
 
 
@@ -1899,9 +1914,9 @@ che essi siano eseguite senza interruzioni.
 
 Le operazioni più semplici, come l'assegnazione o il controllo di una
 variabile (per essere sicuri si può usare il tipo \type{sig\_atomic\_t}) di
-norma sono atomiche, quando occorrono operazioni più complesse si può invece
-usare la funzione \funcd{sigprocmask} che permette di bloccare uno o più
-segnali; il suo prototipo è:
+norma sono atomiche; quando si devono eseguire operazioni più complesse si può
+invece usare la funzione \funcd{sigprocmask} che permette di bloccare uno o
+più segnali; il suo prototipo è:
 \begin{prototype}{signal.h}
 {int sigprocmask(int how, const sigset\_t *set, sigset\_t *oldset)} 
   
@@ -1945,10 +1960,10 @@ quell'indirizzo.
 \end{table}
 
 In questo modo diventa possibile proteggere delle sezioni di codice bloccando
-l'insieme di segnali voluto per poi riabilitarli alla fine della sezione
-critica. La funzione permette di risolvere problemi come quelli mostrati in
-fig.~\ref{fig:sig_event_wrong}, proteggendo la sezione fra il controllo del
-flag e la sua cancellazione.
+l'insieme di segnali voluto per poi riabilitarli alla fine della
+\index{sezione~critica} sezione critica. La funzione permette di risolvere
+problemi come quelli mostrati in fig.~\ref{fig:sig_event_wrong}, proteggendo
+la sezione fra il controllo del flag e la sua cancellazione.
 
 La funzione può essere usata anche all'interno di un gestore, ad esempio
 per riabilitare la consegna del segnale che l'ha invocato, in questo caso però