Lavoro fatto a casa senza ADSL, correzioni multiple agli indici, documentato
[gapil.git] / signal.tex
index 66485bbcb2a63eeb751b91ef4390898b59e89ada..aa47a4dc18514364b4fc05abe80f633cf14761f4 100644 (file)
@@ -60,7 +60,7 @@ il seguente:
   \code{C-z};\footnote{indichiamo con \code{C-x} la pressione simultanea al
     tasto \code{x} del tasto control (ctrl in molte tastiere).}
 \item l'esecuzione di una \func{kill} o di una \func{raise} da parte del
-  processo stesso o di un'altro (solo nel caso della \func{kill}).
+  processo stesso o di un altro (solo nel caso della \func{kill}).
 \end{itemize*}
 
 Ciascuno di questi eventi (compresi gli ultimi due che pure sono controllati
@@ -125,12 +125,12 @@ segnale, ma non 
 di un segnale, pur mantenendo memoria del fatto che è avvenuto.
 
 Nella semantica \textsl{affidabile} (quella utilizzata da Linux e da ogni Unix
-moderno) il gestore una volta installato resta attivo e non si hanno
-tutti i problemi precedenti. In questa semantica i segnali vengono
-\textsl{generati} dal kernel per un processo all'occorrenza dell'evento che
-causa il segnale. In genere questo viene fatto dal kernel impostando l'apposito
-campo della \struct{task\_struct} del processo nella process table (si veda
-fig.~\ref{fig:proc_task_struct}).
+moderno) il gestore una volta installato resta attivo e non si hanno tutti i
+problemi precedenti. In questa semantica i segnali vengono \textsl{generati}
+dal kernel per un processo all'occorrenza dell'evento che causa il segnale. In
+genere questo viene fatto dal kernel impostando l'apposito campo della
+\struct{task\_struct} del processo nella \itindex{process~table}
+\textit{process table} (si veda fig.~\ref{fig:proc_task_struct}).
 
 Si dice che il segnale viene \textsl{consegnato} al processo (dall'inglese
 \textit{delivered}) quando viene eseguita l'azione per esso prevista, mentre
@@ -261,10 +261,10 @@ un eventuale messaggio di errore.
 I segnali che rappresentano errori del programma (divisione per zero o
 violazioni di accesso) hanno anche la caratteristica di scrivere un file di
 \itindex{core~dump}\textit{core dump} che registra lo stato del processo (ed
-in particolare della memoria e dello stack) prima della terminazione.  Questo
-può essere esaminato in seguito con un debugger per investigare sulla causa
-dell'errore.  Lo stesso avviene se i suddetti segnali vengono generati con una
-\func{kill}.
+in particolare della memoria e dello \itindex{stack} stack) prima della
+terminazione.  Questo può essere esaminato in seguito con un debugger per
+investigare sulla causa dell'errore.  Lo stesso avviene se i suddetti segnali
+vengono generati con una \func{kill}.
 
 
 \section{La classificazione dei segnali}
@@ -348,8 +348,8 @@ In alcuni casi alla terminazione del processo 
 file (posto nella directory corrente del processo e chiamato \file{core}) su
 cui viene salvata un'immagine della memoria del processo (il cosiddetto
 \itindex{core~dump}\textit{core dump}), che può essere usata da un debugger
-per esaminare lo stato dello stack e delle variabili al momento della
-ricezione del segnale.
+per esaminare lo stato dello \itindex{stack} stack e delle variabili al
+momento della ricezione del segnale.
 
 \begin{table}[htb]
   \footnotesize
@@ -448,6 +448,7 @@ programma al momento della terminazione.  Questi segnali sono:
 %   molte diverse eccezioni che \texttt{SIGFPE} non distingue, mentre lo
 %   standard IEEE per le operazioni in virgola mobile definisce varie eccezioni
 %   aritmetiche e richiede che esse siano notificate.  
+% TODO trovare altre info su SIGFPE e trattare la notifica delle eccezioni 
   
 \item[\const{SIGILL}] Il nome deriva da \textit{illegal instruction},
   significa che il programma sta cercando di eseguire una istruzione
@@ -456,10 +457,10 @@ programma al momento della terminazione.  Questi segnali sono:
   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 un
-  gestore. Se il gestore ritorna il comportamento del processo è
-  indefinito.
+  una variabile locale, andando a corrompere lo \itindex{stack} stack. Lo
+  stesso segnale viene generato in caso di overflow dello \itindex{stack}
+  stack o di problemi nell'esecuzione di un gestore. Se il gestore ritorna il
+  comportamento del processo è indefinito.
 \item[\const{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
@@ -473,9 +474,9 @@ programma al momento della terminazione.  Questi segnali sono:
   \const{SIGSEGV} questo è un segnale che viene generato di solito quando si
   dereferenzia un puntatore non inizializzato, la differenza è che
   \const{SIGSEGV} indica un accesso non permesso su un indirizzo esistente
-  (tipo fuori dallo heap o dallo stack), mentre \const{SIGBUS} indica
-  l'accesso ad un indirizzo non valido, come nel caso di un puntatore non
-  allineato.
+  (tipo fuori dallo heap o dallo \itindex{stack} stack), mentre \const{SIGBUS}
+  indica l'accesso ad un indirizzo non valido, come nel caso di un puntatore
+  non allineato.
 \item[\const{SIGABRT}] Il nome deriva da \textit{abort}. Il segnale indica che
   il programma stesso ha rilevato un errore che viene riportato chiamando la
   funzione \func{abort} che genera questo segnale.
@@ -656,7 +657,7 @@ processo, questi segnali sono:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
 \item[\const{SIGPIPE}] Sta per \textit{Broken pipe}. Se si usano delle pipe,
   (o delle FIFO o dei socket) è necessario, prima che un processo inizi a
-  scrivere su una di esse, che un'altro l'abbia aperta in lettura (si veda
+  scrivere su una di esse, che un altro l'abbia aperta in lettura (si veda
   sez.~\ref{sec:ipc_pipes}). Se il processo in lettura non è partito o è
   terminato inavvertitamente alla scrittura sulla pipe il kernel genera questo
   segnale. Se il segnale è bloccato, intercettato o ignorato la chiamata che
@@ -950,7 +951,7 @@ suo prototipo 
 \begin{prototype}{signal.h}{int raise(int sig)}
   Invia il segnale \param{sig} al processo corrente.
   
-  \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
+  \bodydesc{La funzione restituisce zero in caso di successo e $-1$ per un
     errore, il solo errore restituito è \errval{EINVAL} qualora si sia
     specificato un numero di segnale invalido.}
 \end{prototype}
@@ -973,7 +974,7 @@ prototipo 
   \funcdecl{int kill(pid\_t pid, int sig)} Invia il segnale \param{sig} al
   processo specificato con \param{pid}.
   
-  \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
+  \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
     errore nel qual caso \var{errno} assumerà uno dei valori:
     \begin{errlist}
     \item[\errcode{EINVAL}] Il segnale specificato non esiste.
@@ -1007,12 +1008,14 @@ Una seconda funzione che pu
 \code{kill(-pidgrp, signal)}; il suo prototipo è:
 \begin{prototype}{signal.h}{int killpg(pid\_t pidgrp, int signal)} 
   
-  Invia il segnale \param{signal} al process group \param{pidgrp}.
-  \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
+  Invia il segnale \param{signal} al \itindex{process~group} \textit{process
+    group} \param{pidgrp}.
+
+  \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
     errore, gli errori sono gli stessi di \func{kill}.}
 \end{prototype}
-\noindent e permette di inviare un segnale a tutto un \textit{process group}
-(vedi sez.~\ref{sec:sess_proc_group}).
+\noindent e permette di inviare un segnale a tutto un \itindex{process~group}
+\textit{process group} (vedi sez.~\ref{sec:sess_proc_group}).
 
 \begin{table}[htb]
   \footnotesize
@@ -1023,11 +1026,11 @@ Una seconda funzione che pu
     \hline
     \hline
     $>0$ & il segnale è mandato al processo con il \acr{pid} indicato.\\
-    0    & il segnale è mandato ad ogni processo del \textit{process group}
-    del chiamante.\\ 
+    0    & il segnale è mandato ad ogni processo del \itindex{process~group}
+           \textit{process group} del chiamante.\\ 
     $-1$ & il segnale è mandato ad ogni processo (eccetto \cmd{init}).\\
-    $<-1$ & il segnale è mandato ad ogni processo del process group 
-    $|\code{pid}|$.\\
+    $<-1$ & il segnale è mandato ad ogni processo del \textit{process group} 
+            \itindex{process~group} $|\code{pid}|$.\\
     \hline
   \end{tabular}
   \caption{Valori dell'argomento \param{pid} per la funzione
@@ -1117,7 +1120,7 @@ suo prototipo 
   Predispone l'invio di un segnale di allarme alla scadenza dell'intervallo
   \param{value} sul timer specificato da \param{which}.
   
-  \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
+  \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
     errore, nel qual caso \var{errno} assumerà uno dei valori \errval{EINVAL} o
     \errval{EFAULT}.}
 \end{prototype}
@@ -1213,7 +1216,7 @@ valore corrente di un timer senza modificarlo, 
   
   Legge in \param{value} il valore del timer specificato da \param{which}.
   
-  \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
+  \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
     errore e restituisce gli stessi errori di \func{getitimer}}
 \end{prototype}
 \noindent i cui argomenti hanno lo stesso significato e formato di quelli di
@@ -1265,7 +1268,7 @@ segnale 
   Pone il processo in stato di sleep fino al ritorno di un gestore.
   
   \bodydesc{La funzione ritorna solo dopo che un segnale è stato ricevuto ed
-    il relativo gestore è ritornato, nel qual caso restituisce -1 e
+    il relativo gestore è ritornato, nel qual caso restituisce $-1$ e
     \var{errno} assumerà il valore \errval{EINTR}.}
 \end{prototype}
 
@@ -1315,8 +1318,8 @@ seguono quella di SUSv2 che prevede il seguente prototipo:
   
   Pone il processo in stato di sleep per \param{usec} microsecondi.
   
-  \bodydesc{La funzione restituisce zero se l'attesa viene completata, o -1 in
-    caso di errore, nel qual caso \var{errno} assumerà il valore
+  \bodydesc{La funzione restituisce zero se l'attesa viene completata, o $-1$
+    in caso di errore, nel qual caso \var{errno} assumerà il valore
     \errval{EINTR}.}
 
 \end{prototype}
@@ -1331,8 +1334,8 @@ POSIX1.b, il cui prototipo 
   Pone il processo in stato di sleep per il tempo specificato da \param{req}.
   In caso di interruzione restituisce il tempo restante in \param{rem}.
   
-  \bodydesc{La funzione restituisce zero se l'attesa viene completata, o -1 in
-    caso di errore, nel qual caso \var{errno} assumerà uno dei valori: 
+  \bodydesc{La funzione restituisce zero se l'attesa viene completata, o $-1$
+    in caso di errore, nel qual caso \var{errno} assumerà uno dei valori:
     \begin{errlist}
     \item[\errcode{EINVAL}] si è specificato un numero di secondi negativo o un
       numero di nanosecondi maggiore di 999.999.999.
@@ -1620,7 +1623,7 @@ segnali: \funcd{sigemptyset}, \funcd{sigfillset}, \funcd{sigaddset},
   
   \bodydesc{Le prime quattro funzioni ritornano 0 in caso di successo, mentre
     \func{sigismember} ritorna 1 se \param{signum} è in \param{set} e 0
-    altrimenti. In caso di errore tutte ritornano -1, con \var{errno}
+    altrimenti. In caso di errore tutte ritornano $-1$, con \var{errno}
     impostata a \errval{EINVAL} (il solo errore possibile è che \param{signum}
     non sia un segnale valido).}
 \end{functions}
@@ -1660,7 +1663,7 @@ da un processo. Il suo prototipo 
   
   Installa una nuova azione per il segnale \param{signum}.
   
-  \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
+  \bodydesc{La funzione restituisce zero in caso di successo e $-1$ per un
     errore, nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
   \item[\errcode{EINVAL}] Si è specificato un numero di segnale invalido o si è
@@ -1750,8 +1753,8 @@ in tab.~\ref{tab:sig_sa_flag}.
     \const{SA\_SIGINFO}  & Deve essere specificato quando si vuole usare un
                            gestore in forma estesa usando
                            \var{sa\_sigaction} al posto di \var{sa\_handler}.\\
-    \const{SA\_ONSTACK}  & Stabilisce l'uso di uno stack alternativo per
-                           l'esecuzione del gestore (vedi
+    \const{SA\_ONSTACK}  & Stabilisce l'uso di uno \itindex{stack} stack 
+                           alternativo per l'esecuzione del gestore (vedi
                            sez.~\ref{sec:sig_specific_features}).\\ 
     \hline
   \end{tabular}
@@ -1759,6 +1762,8 @@ in tab.~\ref{tab:sig_sa_flag}.
   \label{tab:sig_sa_flag}
 \end{table}
 
+% TODO con il 2.6 sono stati aggiunti SA_NOCLDWAIT e altro, documentare
+
 Come si può notare in fig.~\ref{fig:sig_sigaction} \func{sigaction} permette
 di utilizzare due forme diverse di gestore,\footnote{La possibilità è prevista
   dallo standard POSIX.1b, ed è stata aggiunta nei kernel della serie 2.1.x
@@ -1860,11 +1865,11 @@ estremamente semplice, 
   le funzioni piccole ed usate di frequente (in particolare nel kernel, dove
   in certi casi le ottimizzazioni dal compilatore, tarate per l'uso in user
   space, non sono sempre adatte). In tal caso infatti le istruzioni per creare
-  un nuovo frame nello stack per chiamare la funzione costituirebbero una
-  parte rilevante del codice, appesantendo inutilmente il programma.
-  Originariamente questo comportamento veniva ottenuto con delle macro, ma
-  queste hanno tutta una serie di problemi di sintassi nel passaggio degli
-  argomenti (si veda ad esempio \cite{PratC}) che in questo modo possono
+  un nuovo frame nello \itindex{stack} stack per chiamare la funzione
+  costituirebbero una parte rilevante del codice, appesantendo inutilmente il
+  programma.  Originariamente questo comportamento veniva ottenuto con delle
+  macro, ma queste hanno tutta una serie di problemi di sintassi nel passaggio
+  degli argomenti (si veda ad esempio \cite{PratC}) che in questo modo possono
   essere evitati.}
 
 
@@ -1902,7 +1907,7 @@ segnali; il suo prototipo 
   
   Cambia la \textsl{maschera dei segnali} del processo corrente.
   
-  \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
+  \bodydesc{La funzione restituisce zero in caso di successo e $-1$ per un
     errore, nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
   \item[\errcode{EINVAL}] Si è specificato un numero di segnale invalido.
@@ -1965,7 +1970,7 @@ sospensione del processo lo standard POSIX ha previsto la funzione
   
   Imposta la \textit{signal mask} specificata, mettendo in attesa il processo.
   
-  \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
+  \bodydesc{La funzione restituisce zero in caso di successo e $-1$ per un
     errore, nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
   \item[\errcode{EINVAL}] Si è specificato un numero di segnale invalido.
@@ -2045,7 +2050,7 @@ standard POSIX.1; il suo prototipo 
   
 Scrive in \param{set} l'insieme dei segnali pendenti.
   
-  \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
+  \bodydesc{La funzione restituisce zero in caso di successo e $-1$ per un
     errore.}
 \end{prototype}
 
@@ -2058,11 +2063,11 @@ escluderne l'avvenuto invio al momento della chiamata non significa nulla
 rispetto a quanto potrebbe essere in un qualunque momento successivo.
 
 Una delle caratteristiche di BSD, disponibile anche in Linux, è la possibilità
-di usare uno stack alternativo per i segnali; è cioè possibile fare usare al
-sistema un altro stack (invece di quello relativo al processo, vedi
-sez.~\ref{sec:proc_mem_layout}) solo durante l'esecuzione di un
-gestore. L'uso di uno stack alternativo è del tutto trasparente ai
-gestori, occorre però seguire una certa procedura:
+di usare uno \itindex{stack} stack alternativo per i segnali; è cioè possibile
+fare usare al sistema un altro \itindex{stack} stack (invece di quello
+relativo al processo, vedi sez.~\ref{sec:proc_mem_layout}) solo durante
+l'esecuzione di un gestore.  L'uso di uno stack alternativo è del tutto
+trasparente ai gestori, occorre però seguire una certa procedura:
 \begin{enumerate}
 \item Allocare un'area di memoria di dimensione sufficiente da usare come
   stack alternativo;
@@ -2078,24 +2083,24 @@ In genere il primo passo viene effettuato allocando un'opportuna area di
 memoria con \code{malloc}; in \file{signal.h} sono definite due costanti,
 \const{SIGSTKSZ} e \const{MINSIGSTKSZ}, che possono essere utilizzate per
 allocare una quantità di spazio opportuna, in modo da evitare overflow. La
-prima delle due è la dimensione canonica per uno stack di segnali e di norma è
-sufficiente per tutti gli usi normali. 
+prima delle due è la dimensione canonica per uno \itindex{stack} stack di
+segnali e di norma è sufficiente per tutti gli usi normali.
 
 La seconda è lo spazio che occorre al sistema per essere in grado di lanciare
 il gestore e la dimensione di uno stack alternativo deve essere sempre
 maggiore di questo valore. Quando si conosce esattamente quanto è lo spazio
 necessario al gestore gli si può aggiungere questo valore per allocare uno
-stack di dimensione sufficiente.
+\itindex{stack} stack di dimensione sufficiente.
 
-Come accennato, per poter essere usato, lo stack per i segnali deve essere
-indicato al sistema attraverso la funzione \funcd{sigaltstack}; il suo
-prototipo è:
+Come accennato, per poter essere usato, lo \itindex{stack} stack per i segnali
+deve essere indicato al sistema attraverso la funzione \funcd{sigaltstack}; il
+suo prototipo è:
 \begin{prototype}{signal.h}
 {int sigaltstack(const stack\_t *ss, stack\_t *oss)}
   
 Installa un nuovo stack per i segnali.
   
-  \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
+  \bodydesc{La funzione restituisce zero in caso di successo e $-1$ per un
     errore, nel qual caso \var{errno} assumerà i valori:
 
   \begin{errlist}
@@ -2110,10 +2115,10 @@ Installa un nuovo stack per i segnali.
 \end{prototype}
 
 La funzione prende come argomenti puntatori ad una struttura di tipo
-\var{stack\_t}, definita in fig.~\ref{fig:sig_stack_t}. I due valori \param{ss}
-e \param{oss}, se non nulli, indicano rispettivamente il nuovo stack da
-installare e quello corrente (che viene restituito dalla funzione per un
-successivo ripristino).
+\var{stack\_t}, definita in fig.~\ref{fig:sig_stack_t}. I due valori
+\param{ss} e \param{oss}, se non nulli, indicano rispettivamente il nuovo
+\itindex{stack} stack da installare e quello corrente (che viene restituito
+dalla funzione per un successivo ripristino).
 
 \begin{figure}[!htb]
   \footnotesize \centering
@@ -2125,33 +2130,34 @@ successivo ripristino).
   \label{fig:sig_stack_t}
 \end{figure}
 
-Il campo \var{ss\_sp} di \struct{stack\_t} indica l'indirizzo base dello stack,
-mentre \var{ss\_size} ne indica la dimensione; il campo \var{ss\_flags} invece
-indica lo stato dello stack. Nell'indicare un nuovo stack occorre
-inizializzare \var{ss\_sp} e \var{ss\_size} rispettivamente al puntatore e
-alla dimensione della memoria allocata, mentre \var{ss\_flags} deve essere
-nullo.  Se invece si vuole disabilitare uno stack occorre indicare
+Il campo \var{ss\_sp} di \struct{stack\_t} indica l'indirizzo base dello
+\itindex{stack} stack, mentre \var{ss\_size} ne indica la dimensione; il campo
+\var{ss\_flags} invece indica lo stato dello stack. Nell'indicare un nuovo
+stack occorre inizializzare \var{ss\_sp} e \var{ss\_size} rispettivamente al
+puntatore e alla dimensione della memoria allocata, mentre \var{ss\_flags}
+deve essere nullo.  Se invece si vuole disabilitare uno stack occorre indicare
 \const{SS\_DISABLE} come valore di \var{ss\_flags} e gli altri valori saranno
 ignorati.
 
 Se \param{oss} non è nullo verrà restituito dalla funzione indirizzo e
-dimensione dello stack corrente nei relativi campi, mentre \var{ss\_flags}
-potrà assumere il valore \const{SS\_ONSTACK} se il processo è in esecuzione
-sullo stack alternativo (nel qual caso non è possibile cambiarlo) e
-\const{SS\_DISABLE} se questo non è abilitato.
-
-In genere si installa uno stack alternativo per i segnali quando si teme di
-avere problemi di esaurimento dello stack standard o di superamento di un
-limite imposto con chiamate del tipo \code{setrlimit(RLIMIT\_STACK, \&rlim)}.
-In tal caso infatti si avrebbe un segnale di \const{SIGSEGV}, che potrebbe
-essere gestito soltanto avendo abilitato uno stack alternativo. 
+dimensione dello \itindex{stack} stack corrente nei relativi campi, mentre
+\var{ss\_flags} potrà assumere il valore \const{SS\_ONSTACK} se il processo è
+in esecuzione sullo stack alternativo (nel qual caso non è possibile
+cambiarlo) e \const{SS\_DISABLE} se questo non è abilitato.
+
+In genere si installa uno \itindex{stack} stack alternativo per i segnali
+quando si teme di avere problemi di esaurimento dello stack standard o di
+superamento di un limite (vedi sez.~\ref{sec:sys_resource_limit}) imposto con
+chiamate del tipo \code{setrlimit(RLIMIT\_STACK, \&rlim)}.  In tal caso
+infatti si avrebbe un segnale di \const{SIGSEGV}, che potrebbe essere gestito
+soltanto avendo abilitato uno \itindex{stack} stack alternativo.
 
 Si tenga presente che le funzioni chiamate durante l'esecuzione sullo stack
 alternativo continueranno ad usare quest'ultimo, che, al contrario di quanto
-avviene per lo stack ordinario dei processi, non si accresce automaticamente
-(ed infatti eccederne le dimensioni può portare a conseguenze imprevedibili).
-Si ricordi infine che una chiamata ad una funzione della famiglia
-\func{exec} cancella ogni stack alternativo.
+avviene per lo \itindex{stack} stack ordinario dei processi, non si accresce
+automaticamente (ed infatti eccederne le dimensioni può portare a conseguenze
+imprevedibili).  Si ricordi infine che una chiamata ad una funzione della
+famiglia \func{exec} cancella ogni stack alternativo.
 
 Abbiamo visto in fig.~\ref{fig:sig_sleep_incomplete} come si possa usare
 \func{longjmp} per uscire da un gestore rientrando direttamente nel corpo
@@ -2188,7 +2194,7 @@ due comportamenti il programma deve assumere; i loro prototipi sono:
 \end{functions}
 
 Le due funzioni prendono come primo argomento la variabile su cui viene
-salvato il contesto dello stack per permettere il
+salvato il contesto dello \itindex{stack} stack per permettere il
 \index{salto~non-locale}salto non-locale; nel caso specifico essa è di tipo
 \type{sigjmp\_buf}, e non \type{jmp\_buf} come per le analoghe di
 sez.~\ref{sec:proc_longjmp} in quanto in questo caso viene salvata anche la
@@ -2314,7 +2320,7 @@ funzione, \funcd{sigqueue}, il cui prototipo 
   Invia il segnale \param{signo} al processo \param{pid}, restituendo al
   gestore il valore \param{value}.
   
-  \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
+  \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
     errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
   \item[\errcode{EAGAIN}] La coda è esaurita, ci sono già \const{SIGQUEUE\_MAX}
@@ -2359,7 +2365,7 @@ meccanismi di comunicazione elementare; la prima di queste funzioni 
   
   Attende che uno dei segnali specificati in \param{set} sia pendente.
   
-  \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
+  \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
     errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
   \item[\errcode{EINTR}] La funzione è stata interrotta.
@@ -2404,7 +2410,7 @@ relativi prototipi sono:
   timeout in \param{timeout}.
 
   
-  \bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso di
+  \bodydesc{Le funzioni restituiscono 0 in caso di successo e $-1$ in caso di
     errore, nel qual caso \var{errno} assumerà uno dei valori già visti per
     \func{sigwait}, ai quali si aggiunge, per \func{sigtimedwait}:
   \begin{errlist}