Il numero totale di segnali presenti è dato dalla macro \texttt{NSIG}, e dato
che i numeri dei segnali sono allocati progressivamente, essa corrisponde
anche al successivo del valore numerico assegnato all'ultimo segnale definito,
-in \ntab\ si è riportato l'elenco completo dei segnali definiti in Linux,
-comparati con quelli definiti in vari standard.
+in \ntab\ si è riportato l'elenco completo dei segnali definiti in Linux
+(estratto dalle man page), comparati con quelli definiti in vari standard.
\begin{table}[htb]
\centering
\hline
\end{tabular}
\caption{Lista dei segnali in Linux}
- \label{tab:sign_signal_list}
+ \label{tab:sig_signal_list}
\end{table}
+in \curtab\ si sono riportate anche le caratteristiche di ciascun segnale
+indicate nel campo azione con una lettera, la cui legenda è:
+\begin{table}[htb]
+ \centering
+ \begin{tabular}[c]{c p{6cm}}
+ A & L'azione di default è terminare il processo. \\
+ B & L'azione di default è ignorare il segnale. \\
+ C & L'azione di default è terminare il processo e scrivere un \textit{core
+ dump}. \\
+ D & L'azione di default è fermare il processo. \\
+ E & Il segnale non può essere intercettato. \\
+ F & Il segnale non può essere ignorato.\\
+ \end{tabular}
+ \caption{Legenda delle caratteristiche dei segnali riportate in
+ \tabref{tab:sig_signal_list}. }
+ \label{tab:sig_action_leg}
+\end{table}
+
+
\subsubsection{Segnali di errore di programma}
+\label{sec:sig_prog_error}
Questi segnali sono generati quando il sistema, o in certi casi direttamente
l'hardware (come per i page fault non validi) rileva un qualche errore
Questi segnali sono:
-\begin{itemize}
+\begin{list}
\item \texttt{SIGFPE} Riporta un errore aritmetico fatale. Benché il nome
derivi da \textit{floating point exception} si applica a tutti gli errori
aritmetici compresa la divisione per zero e l'overflow.
È tipico ottenere questo segnale dereferenziando un puntatore nullo o non
inizializzato leggendo al di la della fine di un vettore.
-
-\item \texttt{SIGBUS}
-\item \texttt{SIGABRT}
+
+\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}
+\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{list}
+
+
+\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}
+
+\begin{description}
+\item \texttt{SIGALRM}
+\item \texttt{SIGVTALRM}
+\item \texttt{SIGPROF}
+\end{description}
+
+
+\subsection{I segnali di I/O asincrono}
+\label{sec:sig_asyncio}
+
+\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}
+
+
+\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}
+
+\begin{description}
+\item \texttt{SIGPIPE}
+\item \texttt{SIGLOST}
+\item \texttt{SIGXCPU}
+\item \texttt{SIGXFSZ}
+\end{description}
+
+
+\subsection{Ulteriori segnali}
+\label{sec:sig_misc_sig}
+
+\begin{description}
+\item \texttt{SIGUSR1} e \texttt{SIGUSR2}
+\item \texttt{SIGWINCH}
+\item \texttt{SIGINFO}
+\end{description}
-\end{itemize}