\subsubsection{Segnali di errore di programma}
-Questi segnali sono generati quando c'è un grave errore nel programma rilevato
-dal sistema o dallo stesso hardware. In generale indicano che il programma ha
-dei gravi problemi e l'esecuzione non può essere proseguita.
-
-Alcuni programmi usano questi segnali per riordinare le cose prima di uscire.
-Ad esempio ripristinare i settaggi della console, o eliminare i file di lock.
-In questo caso il manipolatore deve concludersi ripristinando l'azione di
-default e rialzando il segnale, così che il programma possa concludersi come
-se il manipolatore non ci fosse mai stato.
-
-L'azione di default per tutti questi segnali è causare la terminazione del
+Questi segnali sono generati quando il sistema, o in certi casi direttamente
+l'hardware (come per i page fault non valildi) rileva un qualche errore
+insanabile nel programma in esecuzione. In generale la generazione di questi
+segnali significa che il programma ha dei gravi problemi (ad esempio ha
+dereferenziato un puntatore non valido o ha eseguito una operazione aritmetica
+proibita) e l'esecuzione non può essere proseguita.
+
+In genere si intercettano questi segnali per permettere al programma di
+terminare in maniera pulita, ad esempio per ripristinare i settaggi della
+console o eliminare i file di lock prima dell'uscita. In questo caso il
+manipolatore deve concludersi ripristinando l'azione di default e rialzando il
+segnale, in questo modo il programma si concluderà senza effetti spiacevoli,
+ma riportando lo stesso stato di uscita che avrebbe avuto se il manipolatore
+non ci fosse stato.
+
+L'azione di default per tutti questi segnali è causare la terminazione del
processo che li ha causati. In genere oltre a questo il segnale provoca pure
la registrazione su disco di un \textit{core dump file} che viene scritto in
un file \texttt{core} nella directory corrente del processo al momento
-dell'errore.
+dell'errore.
Questi segnali sono:
% molte diverse eccezioni che \texttt{SIGFPE} non distingue, mentre lo
% standard IEEE per le operazioni in virgola mobile definisce vaire eccezioni
% aritmetiche e richiede che esse siano notificate.
-\item \texttt{SIGFPE} Il nome deriva da \textit{illegal instruction}
-\item \texttt{SIGILL}
-\item \texttt{SIGSEGV}
+\item \texttt{SIGILL} Il nome deriva da \textit{illegal instruction},
+ significa che il programma sta cercando di eseguire una istruzione
+ privilegiata od inesistente, in generale del codice illegale. Poiché il
+ compilatore del C genera del codice valido si ottiene questo segnale se il
+ file eseguibile è corrotto o si stanno cercando di eseguire dei
+ dati. Quest'ultimo caso può accadere quando si passa un puntatore sbagliato
+ al posto di un puntatore a funzione, o si eccede la scrittura di un array di
+ una variabile locale, andando a corrompere lo stack. Lo stesso segnale viene
+ generato in caso di overflow dello stack o di problemi nell'esecuzione di
+ di un signal handler.
+
+\item \texttt{SIGSEGV} Il nome deriva da \textit{segment violation}, e
+ significa che il programma sta cercando di leggere o scrivere in una zona di
+ memoria protetta al di fuori di quella che gli è stata riservata dal
+ sistema. In genere è il meccanismo della protezione della memoria che si
+ accorge dell'errore ed il kernel genera il segnale.
+
+ È tipico ottenere questo segnale dereferenziando un puntatore nullo o non
+ inizializzatoo leggendo al di la della fine di un vettore.
+
\item \texttt{SIGBUS}
\item \texttt{SIGABRT}
\item \texttt{SIGTRAP}