X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=signal.tex;h=f67c571413ecd8d49d2b4108e72e3575cb33f8e8;hp=c35561b3476b0f97e80b001dbbb9d78710456897;hb=487b554b85cda92d10367d5af69a0355b9b2329d;hpb=90d696f5005a8ce307042cb6aabfff8335747380 diff --git a/signal.tex b/signal.tex index c35561b..f67c571 100644 --- a/signal.tex +++ b/signal.tex @@ -74,7 +74,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 +129,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 +402,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 +425,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 +453,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 +489,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 +584,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 +614,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 +633,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 +670,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} @@ -722,3 +736,10 @@ intercettati). \subsection{Funzioni rientranti e default dei segnali} \label{sec:sig_reentrant} + + + + +\subsection{La funzione \func{sigpending}} +\label{sec:sig_sigpending} +