X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=signal.tex;h=3b11014a81f591a6a8aa10241da17911ca8ba83a;hp=7cbda4f9ae2bef49a47f19251e5cfd504a544ece;hb=17e39705eccbaa9111592907195befd05dbbed2d;hpb=7ab2f18da45ad6da904be851e3a864adeac8cb10 diff --git a/signal.tex b/signal.tex index 7cbda4f..3b11014 100644 --- a/signal.tex +++ b/signal.tex @@ -1,3 +1,13 @@ +%% signal.tex +%% +%% Copyright (C) 2000-2002 Simone Piccardi. Permission is granted to +%% copy, distribute and/or modify this document under the terms of the GNU Free +%% Documentation License, Version 1.1 or any later version published by the +%% Free Software Foundation; with the Invariant Sections being "Prefazione", +%% with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the +%% license is included in the section entitled "GNU Free Documentation +%% License". +%% \chapter{I segnali} \label{cha:signals} @@ -1384,8 +1394,8 @@ 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 +si trova nei sorgenti allegati nel file \file{SigHand.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. @@ -1407,7 +1417,7 @@ di zombie. #include #include "macro.h" -void HandSIGCHLD(int sig) +void HandSigCHLD(int sig) { int errno_save; int status; @@ -1984,25 +1994,24 @@ inline SigFunc * Signal(int signo, SigFunc *func) Per questo motivo si è provveduto, per mantenere un'interfaccia semplificata che abbia le stesse caratteristiche di \func{signal}, a definire una funzione equivalente attraverso \func{sigaction}; la funzione è \code{Signal}, e si -trova definita come \code{inline} nel file \file{wrapper.h} (nei sorgenti -allegati), riportata in \figref{fig:sig_Signal_code}. La riutilizzeremo spesso -in seguito. +trova definita nel file \file{SigHand.c} (nei sorgenti allegati), e riportata +in \figref{fig:sig_Signal_code}. La riutilizzeremo spesso in seguito. \subsection{La gestione della \textsl{maschera dei segnali} o \textit{signal mask}} \label{sec:sig_sigmask} Come spiegato in \secref{sec:sig_semantics} tutti i moderni sistemi unix-like -permettono si bloccare temporaneamente (o di eliminare completamente, impostando -\macro{SIG\_IGN} come azione) la consegna dei segnali ad un processo. Questo è -fatto specificando la cosiddetta \textsl{maschera dei segnali} (o -\textit{signal mask}) del processo\footnote{nel caso di Linux essa è mantenuta - dal campo \var{blocked} della \var{task\_struct} del processo.} cioè -l'insieme dei segnali la cui consegna è bloccata. Abbiamo accennato in -\secref{sec:proc_fork} che la \textit{signal mask} viene ereditata dal padre -alla creazione di un processo figlio, e abbiamo visto al paragrafo precedente -che essa può essere modificata, durante l'esecuzione di un gestore, -attraverso l'uso dal campo \var{sa\_mask} di \var{sigaction}. +permettono si bloccare temporaneamente (o di eliminare completamente, +impostando \macro{SIG\_IGN} come azione) la consegna dei segnali ad un +processo. Questo è fatto specificando la cosiddetta \textsl{maschera dei + segnali} (o \textit{signal mask}) del processo\footnote{nel caso di Linux + essa è mantenuta dal campo \var{blocked} della \var{task\_struct} del + processo.} cioè l'insieme dei segnali la cui consegna è bloccata. Abbiamo +accennato in \secref{sec:proc_fork} che la \textit{signal mask} viene +ereditata dal padre alla creazione di un processo figlio, e abbiamo visto al +paragrafo precedente che essa può essere modificata, durante l'esecuzione di +un gestore, attraverso l'uso dal campo \var{sa\_mask} di \var{sigaction}. Uno dei problemi evidenziatisi con l'esempio di \secref{fig:sig_event_wrong} è che in molti casi è necessario proteggere delle sezioni di codice (nel caso in