From f9ef318732546a3167cc632a56dc7aaa03f34c72 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Wed, 17 Apr 2002 22:10:33 +0000 Subject: [PATCH] Un po' di spiegazioni in piu` --- signal.tex | 52 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/signal.tex b/signal.tex index 3ad7209..4055c7a 100644 --- a/signal.tex +++ b/signal.tex @@ -351,18 +351,19 @@ stato dello stack e delle variabili al momento della ricezione del segnale. \centering \begin{tabular}[c]{|l|c|c|p{8cm}|} \hline - \textbf{Segnale}&\textbf{Standard}&\textbf{Azione}&\textbf{Descrizione} \\ + \textbf{Segnale} &\textbf{Standard}&\textbf{Azione}&\textbf{Descrizione} \\ \hline \hline - \macro{SIGHUP} &PL & A &Hangup o terminazione del processo di controllo\\ - \macro{SIGINT} &PL & A & Interrupt da tastiera (\cmd{C-c}) \\ - \macro{SIGQUIT} &PL & C & Quit da tastiera (\cmd{C-y}) \\ - \macro{SIGILL} &PL & C & Istruzione illegale \\ - \macro{SIGABRT} &PL & C & Segnale di abort da \func{abort} \\ - \macro{SIGFPE} &PL & C & Errore aritmetico \\ - \macro{SIGKILL} &PL &AEF& Segnale di terminazione forzata \\ - \macro{SIGSEGV} &PL & C & Errore di accesso in memoria \\ - \macro{SIGPIPE} &PL & A & Pipe spezzata \\ + \macro{SIGHUP} &PL & A & Hangup o terminazione del processo di + controllo \\ + \macro{SIGINT} &PL & A & Interrupt da tastiera (\cmd{C-c}) \\ + \macro{SIGQUIT} &PL & C & Quit da tastiera (\cmd{C-y}) \\ + \macro{SIGILL} &PL & C & Istruzione illegale \\ + \macro{SIGABRT} &PL & C & Segnale di abort da \func{abort} \\ + \macro{SIGFPE} &PL & C & Errore aritmetico \\ + \macro{SIGKILL} &PL &AEF& Segnale di terminazione forzata \\ + \macro{SIGSEGV} &PL & C & Errore di accesso in memoria \\ + \macro{SIGPIPE} &PL & A & Pipe spezzata \\ \macro{SIGALRM} &PL & A & Segnale del timer da \func{alarm} \\ \macro{SIGTERM} &PL & A & Segnale di terminazione \verb|C-\| \\ \macro{SIGUSR1} &PL & A & Segnale utente numero 1 \\ @@ -394,7 +395,8 @@ stato dello stack e delle variabili al momento della ricezione del segnale. \macro{SIGINFO} &L & & Sinonimo di \macro{SIGPWR} \\ \macro{SIGLOST} &L & A & Perso un lock sul file (per NFS) \\ \macro{SIGWINCH} &LB & B & Finestra ridimensionata (4.3 BSD, Sun) \\ - \macro{SIGUNUSED}&L & A &Segnale inutilizzato (diventerà \macro{SIGSYS})\\ + \macro{SIGUNUSED}&L & A & Segnale inutilizzato (diventerà + \macro{SIGSYS}) \\ \hline \end{tabular} \caption{Lista dei segnali in Linux.} @@ -1811,7 +1813,14 @@ dettagli si consulti la man page di \func{sigaction}). Il campo \var{sa\_mask} serve ad indicare l'insieme dei segnali che devono essere bloccati durante l'esecuzione del manipolatore, ad essi viene comunque sempre aggiunto il segnale che ne ha causato la chiamata, a meno che non si -sia specificato con \var{sa\_flag} un comportamento diverso. +sia specificato con \var{sa\_flag} un comportamento diverso. + +L'uso di questo campo permette ad esempio di risolvere il problema residuo +dell'implementazione di \code{sleep} mostrata in +\secref{fig:sig_sleep_incomplete}: in quel caso infatti se il segnale di +allarme interrompe un altro manipolatore questo non sarà eseguito +correttamente, la cosa può essere prevenuta installando quest'ultimo usando +\var{sa\_mask} per bloccare \macro{SIGALRM} durante la sua esecuzione. Il valore di \var{sa\_flag} permette di specificare vari aspetti del comportamento di \func{sigaction}, e della reazione del processo ai vari @@ -1942,12 +1951,19 @@ quell'indirizzo. \label{tab:sig_procmask_how} \end{table} -Un altro +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 +\secref{fig:sig_event_wrong}, proteggendo la sezione fra il controllo del flag +e la sua cancellazione. + +Un altro problema che abbiamo visto presentarsi con l'uso di \func{pause} è +quello relativo \begin{prototype}{signal.h} {int sigsuspend(const sigset\_t *mask)} - Cambia la \textit{signal mask} del processo corrente. + Setta la \textit{signal mask} specificata, mettendo in attesa il processo. \bodydesc{La funzione restituisce zero in caso di successo e -1 per un errore, nel qual caso \var{errno} assumerà i valori: @@ -1962,14 +1978,6 @@ Un altro - -\subsection{Funzioni rientranti e default dei segnali} -\label{sec:sig_reentrant} - - - - - %%% Local Variables: %%% mode: latex %%% TeX-master: "gapil" -- 2.30.2