+\item \texttt{SIGILL} Il nome deriva da \textit{illegal instruction},
+ significa che il programma sta cercando di eseguire una istruzione
+ privilegiata o 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 vettore 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
+ inizializzato leggendo al di la della fine di un vettore.
+\item \texttt{SIGBUS} In maniera analoga a \texttt{SIGSEGV} questo è un
+ segnale che viene generato di solito quando si dereferenzia un puntatore non
+ inzializzato, la differenza con con \texttt{SIGSEGV} è che questo indica un
+ accesso non valido su un indirizzo esistente (tipo fuori dallo heap o dallo
+ stack), mentre \texttt{SIGBUS} indica l'accesso ad un indirizzo non valido,
+ come nel caso di un puntatore non allineato.
+\item \texttt{SIGABRT} Il segnale indica che il programma stesso ha rilevato
+ un errore che viene riportato chiamando la funzione \texttt{abort} che
+ genera questo segnale.
+\item \texttt{SIGTRAP}
+\item \texttt{SIGSYS} Sta ad indicare che si è eseguta una istruzione che
+ richiede l'esecuzione di una system call, ma si è fornito un codice
+ sbagliato per quest'ultima.
+\end{description}
+
+
+\subsection{I segnali di terminazione}
+\label{sec:sig_termination}
+
+Questo tipo di segnali sono usati per terminare un processo; hanno vari nomi a
+causa del differente uso che se ne può fare, ed i programmi possono
+trattarli in maniera differente.
+
+La ragione per cui può essere necessario trattare questi segnali è che il
+programma può dover eseguire una serie di azioni di pulizia prima di
+terminare, come salvare informazioni sullo stato in cui si trova, cancellare
+file temporanei, o ripristinare delle condizioni alterate durante il
+funzionamento (tipi il modo del terminale o i settaggi di una qualche
+periferica).
+
+L'azione di default di questi segnali è di terminare il processo, questi
+segnali sono:
+\begin{description}
+\item \texttt{SIGTERM}
+\item \texttt{SIGINT}
+\item \texttt{SIGQUIT}
+\item \texttt{SIGKILL}
+\item \texttt{SIGHUP}
+\end{description}
+
+\subsection{I segnali di allarme}
+\label{sec:sig_alarm}
+
+Questi segnali sono generati dalla scadenza di un temporizzatore. Il loro
+comportamento di default è quello di causare la terminazione del programma, ma
+nessun default ha una utlità avrebbe una utilità particolare, in quanto l'uso
+di questi segnali presuppone quasi sempre la necessità di un
+manipolatore. Questi segnali sono:
+\begin{description}
+\item \texttt{SIGALRM}
+\item \texttt{SIGVTALRM}
+\item \texttt{SIGPROF}
+\end{description}
+
+
+\subsection{I segnali di I/O asincrono}
+\label{sec:sig_asyncio}
+
+Questi segnali operano in congiunzione con le funzioni di I/O asincrono. Per
+questo occorre comunque usare \func{fcntl} per abilitare un file descriptor a
+generare questi segnali.
+
+L'azione di default è di essere ignorati. Questi segnali sono:
+\begin{description}
+\item \texttt{SIGIO}
+\item \texttt{SIGURG}
+\item \texttt{SIGPOLL}
+\end{description}
+
+\subsection{I segnali per il controllo di sessione}
+\label{sec:sig_job_control}
+
+Questi sono i segnali usati dal controllo di sessione, il loro uso è specifico
+per questo argomento e verrà trattato quando lo affronteremo.
+Questi segnali sono:
+\begin{description}
+\item \texttt{SIGCHLD}
+\item \texttt{SIGCONT}
+\item \texttt{SIGSTOP}
+\item \texttt{SIGTSTP}
+\item \texttt{SIGTTIN}
+\item \texttt{SIGTTOU}
+\end{description}
+
+\subsection{I segnali di operazioni errate}
+\label{sec:sig_oper_error}
+
+Questi segnali sono usati per riportare al programma errori generati da
+operazioni da lui eseguite; non indicano errori del programma quanto errori
+che impediscono il completamento dell'esecuzione dovute all'interazione con il
+resto del sistema.
+
+L'azione di default di questi segnali è di terminare il processo, questi
+segnali sono:
+\begin{description}
+\item \texttt{SIGPIPE}
+\item \texttt{SIGLOST}
+\item \texttt{SIGXCPU}
+\item \texttt{SIGXFSZ}
+\end{description}
+
+
+\subsection{Ulteriori segnali}
+\label{sec:sig_misc_sig}
+
+Raccogliamo qui infine usa serie di segnali che hanno scopi differenti non
+classificabili in maniera omogenea. Questi segnali sono:
+\begin{description}
+\item \texttt{SIGUSR1} e \texttt{SIGUSR2} Sono due segnali a disposizione
+ dell'utente che li può usare per quello che vuole. Possono essere utili per
+ implementare una comunicazione elementare fra processi diversi, o per
+ eseguire a richiesta una operazione utlizzando un manipolatore. L'azione di
+ default è terminare il processo.
+\item \texttt{SIGWINCH} Il nome sta per \textit{window (size) change} ed è
+ generato da molti sistemi (GNU/Linux compreso) quando le dimensioni (in
+ righe e colonne) di un terminale vengono cambiate. Viene usato da alcuni
+ programmi testuali per riformattare l'uscita su schermo quando si cambia
+ dimensione a quest'ultimo. L'azione di default è di essere ignorato.
+\item \texttt{SIGINFO} Il segnale indica una richiesta di informazioni. È
+ usato con il controllo di sessione, causa la stampa di informazioni da parte
+ del processo leader del gruppo associato al terminale di controllo, gli
+ altri processi lo ignorano.
+\end{description}
+
+
+
+\section{La gestione dei segnali}
+\label{sec:sig_handlers}
+
+I segnali sono il primo e più classico esempio di eventi asincroni, che
+possono accadere in un qualunque momento durante l'esecuzione di un programma.
+Non essendo sotto il controllo del programma la gestione dei segnali non potrà
+essere controllata all'interno del flusso di esecuzione di quest'ultimo, ma
+tutto quello che si potrà fare è di specificare (al kernel, che li genera)
+quale azione andrà intrapresa quando essi si verificano.
+
+In questa sezione vedremo allora come si gestiscono i segnali, partendo dalla
+descrizione di cosa fanno le azioni di default citate in precedenza, per poi
+esaminare le funzioni usate per personalizzare la gestione dei segnali,
+analizzando tutte le problematiche relative alla gestione di eventi asincroni
+di questo tipo.
+
+
+
+\subsection{Le azioni di default}
+\label{sec:sig_default_acttion}