X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=signal.tex;h=14e6d51dd03f51af9e8c478fe7a0a8b719056414;hp=860a1f522c9984d2975db0d26ea7b3c3f54944ae;hb=b7117ca455af39e662610dae3413cc561df91c96;hpb=5099573b0239402d8860e2c0af07c8eb3378b865 diff --git a/signal.tex b/signal.tex index 860a1f5..14e6d51 100644 --- a/signal.tex +++ b/signal.tex @@ -617,8 +617,9 @@ cui si trattano gli argomenti relativi. Questi segnali sono: gestori per far si che un programma produca una qualche azione speciale se viene fermato e riavviato, come per esempio riscrivere un prompt, o inviare un avviso. -\item[\macro{SIGSTOP}] Il segnale ferma un processo (lo porta in uno stato di - sleep); il segnale non può essere né intercettato, né ignorato, né bloccato. +\item[\macro{SIGSTOP}] Il segnale ferma un processo (lo porta cioè in uno + stato di sleep, vedi \secref{sec:proc_sched}); il segnale non può essere né + intercettato, né ignorato, né bloccato. \item[\macro{SIGTSTP}] Il nome sta per \textit{interactive stop}. Il segnale ferma il processo interattivamente, ed è generato dal carattere SUSP (prodotto dalla combinazione \macro{C-z}), ed al contrario di @@ -1379,11 +1380,13 @@ pu completare la procedura di terminazione in modo da evitare la formazione di zombie. -In \figref{fig:sig_sigchld_handl} è mostrato il codice della nostra -implementazione del gestore; se aggiungiamo al codice di -\file{ForkTest.c} l'installazione di questo gestore potremo verificare che -ripetendo l'esempio visto in \secref{sec:proc_termination} che non si ha più -la creazione di zombie. +In \figref{fig:sig_sigchld_handl} è mostrato il codice contenente una +implementazione generica di una routine di gestione per \macro{SIGCHLD}, (che +si trova nei sorgenti allegati nel file \file{HandSIGCHLD.c}); se ripetiamo i +test di \secref{sec:proc_termination}, invocando \cmd{forktest} con l'opzione +\cmd{-s} (che si limita ad effettuare l'installazione di questa funzione come +gestore di \macro{SIGCHLD}) potremo verificare che non si ha più la creazione +di zombie. % è pertanto % naturale usare un esempio che ci permette di concludere la trattazione della @@ -1402,7 +1405,7 @@ la creazione di zombie. #include #include "macro.h" -void sigchld_hand(int sig) +void HandSIGCHLD(int sig) { int errno_save; int status; @@ -1425,18 +1428,19 @@ void sigchld_hand(int sig) \end{lstlisting} \end{minipage} \normalsize - \caption{Un gestore per il segnale \texttt{SIGCHLD}.} + \caption{Codice di una funzione generica di gestione per il segnale + \texttt{SIGCHLD}.} \label{fig:sig_sigchld_handl} \end{figure} Il codice del gestore è di lettura immediata; come buona norma di programmazione (si ricordi quanto accennato \secref{sec:sys_errno}) si comincia (\texttt{\small 12-13}) con il salvare lo stato corrente di -\var{errno}, in modo da poterlo ripristinare prima del ritorno del -gestore (\texttt{\small 22-23}). In questo modo si preserva il valore -della variabile visto dal corso di esecuzione principale del processo, che -sarebbe altrimenti sarebbe sovrascritto dal valore restituito nella successiva -chiamata di \func{wait}. +\var{errno}, in modo da poterlo ripristinare prima del ritorno del gestore +(\texttt{\small 22-23}). In questo modo si preserva il valore della variabile +visto dal corso di esecuzione principale del processo, che sarebbe altrimenti +sarebbe sovrascritto dal valore restituito nella successiva chiamata di +\func{wait}. Il compito principale del gestore è quello di ricevere lo stato di terminazione del processo, cosa che viene eseguita nel ciclo in