X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=signal.tex;h=072b1d1edeaf638aef100fa2e141f3b3b5c7892c;hp=c35561b3476b0f97e80b001dbbb9d78710456897;hb=4dba8f3a359cb208f052c21530a52c4f982a8145;hpb=90d696f5005a8ce307042cb6aabfff8335747380 diff --git a/signal.tex b/signal.tex index c35561b..072b1d1 100644 --- a/signal.tex +++ b/signal.tex @@ -12,6 +12,8 @@ anche essere usati come forma elementare di comunicazione fra processi (ad esempio vengono usati per il controllo di sessione), per notificare eventi (come la terminazione di un processo figlio), etc. + + \section{I concetti base} \label{sec:sig_base} @@ -74,7 +76,7 @@ int sig_handler() \end{lstlisting} \normalsize se un secondo segnale arriva prima che il manipolatore invocato dal primo -abbia eseguito la re-installazione di se stesso il segnale può essere perso o +abbia eseguito la reinstallazione di se stesso il segnale può essere perso o causare il comportamento originale assegnato al segnale (in genere la terminazione del processo). @@ -129,7 +131,7 @@ il processo rester % Un'altra caratteristica della implementazione inaffidabile è che le chiamate % di sistema non sono fatte ripartire automaticamente quando sono interrotte da % un segnale, per questo un programma deve controllare lo stato di uscita della -% chiamata al sistema e riperterla nel caso l'errore riportato da \texttt{errno} +% chiamata al sistema e ripeterla nel caso l'errore riportato da \texttt{errno} % sia \texttt{EINTR}. Questo ci mostra ad esempio come con la semantica inaffidabile non esista una @@ -402,7 +404,7 @@ Questi segnali sono: % Per questo segnale le cose sono complicate dal fatto che possono esserci % molte diverse eccezioni che \texttt{SIGFPE} non distingue, mentre lo -% standard IEEE per le operazioni in virgola mobile definisce vaire eccezioni +% standard IEEE per le operazioni in virgola mobile definisce varie eccezioni % aritmetiche e richiede che esse siano notificate. \item[\macro{SIGILL}] Il nome deriva da \textit{illegal instruction}, @@ -425,7 +427,7 @@ Questi segnali sono: inizializzato leggendo al di la della fine di un vettore. \item[\macro{SIGBUS}] Il nome deriva da \textit{bus error}. Come \macro{SIGSEGV} questo è un segnale che viene generato di solito quando si - dereferenzia un puntatore non inzializzato, la differenza è che + dereferenzia un puntatore non inizializzato, la differenza è che \macro{SIGSEGV} indica un accesso non permesso su un indirizzo esistente (tipo fuori dallo heap o dallo stack), mentre \macro{SIGBUS} indica l'accesso ad un indirizzo non valido, come nel caso di un puntatore non @@ -453,7 +455,7 @@ La ragione per cui pu 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 +funzionamento (come il modo del terminale o i settaggi di una qualche periferica). L'azione di default di questi segnali è di terminare il processo, questi @@ -489,10 +491,10 @@ segnali sono: Se un processo non risponde a nessun altro segnale \macro{SIGKILL} ne causa sempre la terminazione (in effetti il fallimento della terminazione di un - processo da parte di \macro{SIGKILL} costituirebbe un funzionamento del + processo da parte di \macro{SIGKILL} costituirebbe un malfunzionamento del kernel). Talvolta è il sistema stesso che può generare questo segnale quando per condizioni particolari il processo non può più essere eseguito neanche - per eseguire il manipolatore. + per eseguire un manipolatore. \item[\macro{SIGHUP}] Il nome sta per \textit{hang-up}. Segnala che il terminale dell'utente si è disconnesso (ad esempio perché si è interrotta la rete). Viene usato anche per riportare la terminazione del processo di @@ -584,8 +586,15 @@ cui si trattano gli argomenti relativi. Questi segnali sono: o il terminale in uno stato definito prima di fermarsi; se per esempio un programma ha disabilitato l'eco sul terminale può installare un manipolatore per riabilitarlo prima di fermarsi. -\item[\macro{SIGTTIN}] -\item[\macro{SIGTTOU}] +\item[\macro{SIGTTIN}] Un processo non può leggere dal terminale se esegue una + sessione di lavoro in background. Quando un processo in background tenta di + leggere da un terminale viene inviato questo segnale a tutti i processi + della sessione di lavoro. L'azione di default è di fermare il processo. + L'argomento è trattato in \secref{sec:sess_xxx}. +\item[\macro{SIGTTOU}] Segnale analogo al precedente \macro{SIGTTIN}, ma + generato quando si tenta di scrivere o modificare uno dei modi del + terminale. L'azione di default è di fermare il processo, l'argomento è + trattato in \secref{sec:sess_xxx}. \end{basedescript} @@ -607,9 +616,16 @@ segnali sono: terminato inavvertitamente alla scrittura sulla pipe il kernel genera questo segnale. Se il segnale è bloccato, intercettato o ignorato la chiamata che lo ha causato fallisce restituendo l'errore \macro{EPIPE} -\item[\macro{SIGLOST}] Sta per \textit{Resource lost}. -\item[\macro{SIGXCPU}] Sta per \textit{CPU time limit exceeded}. -\item[\macro{SIGXFSZ}] Sta per \textit{File size limit exceeded}. +\item[\macro{SIGLOST}] Sta per \textit{Resource lost}. Viene generato quando + c'è un advisory lock su un file NFS, ed il server riparte dimenticando la + situazione precedente. +\item[\macro{SIGXCPU}] Sta per \textit{CPU time limit exceeded}. Questo + segnale è generato quando un processo eccede il limite impostato per il + tempo di CPU disponibile, vedi \secref{sec:sys_xxx}. +\item[\macro{SIGXFSZ}] Sta per \textit{File size limit exceeded}. Questo + segnale è generato quando un processo tenta di estendere un file oltre le + dimensioni specificate dal limite impostato per le dimensioni massime di un + file, vedi \secref{sec:sys_xxx}. \end{basedescript} @@ -619,7 +635,7 @@ segnali sono: Raccogliamo qui infine usa serie di segnali che hanno scopi differenti non classificabili in maniera omogenea. Questi segnali sono: \begin{basedescript}{\desclabelwidth{2.0cm}} -\item[\macro{SIGUSR1}] e \macro{SIGUSR2} Sono due segnali a disposizione +\item[\macro{SIGUSR1} e \macro{SIGUSR2}] Sono due segnali a disposizione dell'utente che li può usare per quello che vuole. Possono essere utili per implementare una comunicazione elementare fra processi diversi, o per eseguire a richiesta una operazione utilizzando un manipolatore. L'azione di @@ -656,7 +672,7 @@ contenuto, che resta valido solo fino alla successiva chiamata di necessario copiarlo. La seconda funzione deriva da BSD ed è analoga alla funzione \func{perror} -descritta in \secref{sec:intro_strerror}. +descritta in \secref{sec:sys_strerror}. \section{La gestione dei segnali} @@ -691,8 +707,8 @@ comportamento, pur mantenendone immutato il prototipo\footnote{in realt Installa una nuova funzione di gestione (manipolatore) per il segnale \param{signum}, usando il manipolatore \param{handler}. - La funzione ritorna il precedente manipolatore in caso di successo o - \macro{SIG\_ERR} in caso di errore. + \bodydesc{La funzione ritorna il precedente manipolatore in caso di successo + o \macro{SIG\_ERR} in caso di errore.} \end{prototype} In questa definizione si è usato il tipo \type{sighandler\_t} che è una @@ -722,3 +738,10 @@ intercettati). \subsection{Funzioni rientranti e default dei segnali} \label{sec:sig_reentrant} + + + + +\subsection{La funzione \func{sigpending}} +\label{sec:sig_sigpending} +