X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=signal.tex;h=067907943a9303261681f253734eefbe0e7aba61;hb=60e20d29c0515f95b8a171fb33c7214c9bf92021;hp=7d3751b5c58e048b1e61eb5e81d80e8e331fe3d3;hpb=419951b29856965957fe4cacfb61de49e140bb9b;p=gapil.git diff --git a/signal.tex b/signal.tex index 7d3751b..0679079 100644 --- a/signal.tex +++ b/signal.tex @@ -304,12 +304,12 @@ definiti in vari standard. \textbf{Sigla} & \textbf{Significato} \\ \hline \hline - A & L'azione predefinita è terminare il processo. \\ - B & L'azione predefinita è ignorare il segnale. \\ + A & L'azione predefinita è terminare il processo.\\ + B & L'azione predefinita è ignorare il segnale.\\ C & L'azione predefinita è terminare il processo e scrivere un - \itindex{core~dump} \textit{core dump}. \\ - D & L'azione predefinita è fermare il processo. \\ - E & Il segnale non può essere intercettato. \\ + \itindex{core~dump} \textit{core dump}.\\ + D & L'azione predefinita è fermare il processo.\\ + E & Il segnale non può essere intercettato.\\ F & Il segnale non può essere ignorato.\\ \hline \end{tabular} @@ -334,10 +334,10 @@ colonna standard sono stati indicati anche gli standard in cui ciascun segnale \textbf{Sigla} & \textbf{Standard} \\ \hline \hline - P & POSIX. \\ - B & BSD. \\ - L & Linux.\\ - S & SUSv2.\\ + P & POSIX \\ + B & BSD \\ + L & Linux \\ + S & SUSv2 \\ \hline \end{tabular} \caption{Legenda dei valori della colonna \textbf{Standard} di @@ -1045,11 +1045,11 @@ Una seconda funzione che pu \textbf{Valore} & \textbf{Significato} \\ \hline \hline - $>0$ & il segnale è mandato al processo con il \acr{pid} indicato.\\ - 0 & il segnale è mandato ad ogni processo del \itindex{process~group} + $>0$ & Il segnale è mandato al processo con il \acr{pid} indicato.\\ + 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 \textit{process group} + $-1$ & Il segnale è mandato ad ogni processo (eccetto \cmd{init}).\\ + $<-1$ & Il segnale è mandato ad ogni processo del \textit{process group} \itindex{process~group} $|\code{pid}|$.\\ \hline \end{tabular} @@ -1553,17 +1553,21 @@ vuoto. Ma anche questa implementazione comporta dei problemi; in questo caso infatti non viene gestita correttamente l'interazione con gli altri segnali; se -infatti il segnale di allarme interrompe un altro gestore, in questo caso -l'esecuzione non riprenderà nel gestore in questione, ma nel ciclo -principale, interrompendone inopportunamente l'esecuzione. Lo stesso tipo di -problemi si presenterebbero se si volesse usare \func{alarm} per stabilire un -timeout su una qualunque system call bloccante. +infatti il segnale di allarme interrompe un altro gestore, l'esecuzione non +riprenderà nel gestore in questione, ma nel ciclo principale, interrompendone +inopportunamente l'esecuzione. Lo stesso tipo di problemi si presenterebbero +se si volesse usare \func{alarm} per stabilire un timeout su una qualunque +system call bloccante. Un secondo esempio è quello in cui si usa il segnale per notificare una qualche forma di evento; in genere quello che si fa in questo caso è impostare nel gestore un opportuno flag da controllare nel corpo principale del programma (con un codice del tipo di quello riportato in -fig.~\ref{fig:sig_event_wrong}). +fig.~\ref{fig:sig_event_wrong}). La logica è quella di far impostare al +gestore (\texttt{\small 14-19}) una variabile globale preventivamente +inizializzata nel programma principale, il quale potrà determinare, +osservandone il contenuto, l'occorrenza o meno del segnale, e prendere le +relative azioni conseguenti (\texttt{\small 6-11}). \begin{figure}[!htb] \footnotesize\centering @@ -1576,11 +1580,6 @@ fig.~\ref{fig:sig_event_wrong}). \label{fig:sig_event_wrong} \end{figure} -La logica è quella di far impostare al gestore (\texttt{\small 14-19}) una -variabile globale preventivamente inizializzata nel programma principale, il -quale potrà determinare, osservandone il contenuto, l'occorrenza o meno del -segnale, e prendere le relative azioni conseguenti (\texttt{\small 6-11}). - Questo è il tipico esempio di caso, già citato in sez.~\ref{sec:proc_race_cond}, in cui si genera una \itindex{race~condition} \textit{race condition}; infatti, in una situazione in cui un segnale è già @@ -1738,13 +1737,13 @@ l'invocazione. L'uso di questo campo permette ad esempio di risolvere il problema residuo dell'implementazione di \code{sleep} mostrata in fig.~\ref{fig:sig_sleep_incomplete}. In quel caso infatti se il segnale di -allarme avesse interrotto un altro gestore questo non sarebbe stato -eseguito correttamente; la cosa poteva essere prevenuta installando gli altri -gestori usando \var{sa\_mask} per bloccare \const{SIGALRM} durante la -loro esecuzione. Il valore di \var{sa\_flag} permette di specificare vari -aspetti del comportamento di \func{sigaction}, e della reazione del processo -ai vari segnali; i valori possibili ed il relativo significato sono riportati -in tab.~\ref{tab:sig_sa_flag}. +allarme avesse interrotto un altro gestore questo non sarebbe stato eseguito +correttamente; la cosa poteva essere prevenuta installando gli altri gestori +usando \var{sa\_mask} per bloccare \const{SIGALRM} durante la loro esecuzione. +Il valore di \var{sa\_flag} permette di specificare vari aspetti del +comportamento di \func{sigaction}, e della reazione del processo ai vari +segnali; i valori possibili ed il relativo significato sono riportati in +tab.~\ref{tab:sig_sa_flag}. \begin{table}[htb] \footnotesize @@ -1759,30 +1758,39 @@ in tab.~\ref{tab:sig_sa_flag}. fermato da uno dei segnali \const{SIGSTOP}, \const{SIGTSTP}, \const{SIGTTIN} o \const{SIGTTOU}.\\ - \const{SA\_ONESHOT} & Ristabilisce l'azione per il segnale al valore + \const{SA\_RESETHAND}& Ristabilisce l'azione per il segnale al valore predefinito una volta che il gestore è stato lanciato, riproduce cioè il comportamento della semantica inaffidabile.\\ - \const{SA\_RESETHAND}& Sinonimo di \const{SA\_ONESHOT}. \\ + \const{SA\_ONESHOT} & Nome obsoleto, sinonimo non standard di + \const{SA\_RESETHAND}; da evitare.\\ + \const{SA\_ONSTACK} & Stabilisce l'uso di uno \itindex{stack} stack + alternativo per l'esecuzione del gestore (vedi + sez.~\ref{sec:sig_specific_features}).\\ \const{SA\_RESTART} & Riavvia automaticamente le \textit{slow system call} quando vengono interrotte dal suddetto segnale; riproduce cioè il comportamento standard di BSD.\index{system~call~lente}\\ - \const{SA\_NOMASK} & Evita che il segnale corrente sia bloccato durante + \const{SA\_NODEFER} & Evita che il segnale corrente sia bloccato durante l'esecuzione del gestore.\\ - \const{SA\_NODEFER} & Sinonimo di \const{SA\_NOMASK}.\\ + \const{SA\_NOMASK} & Nome obsoleto, sinonimo non standard di + \const{SA\_NODEFER}.\\ \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 \itindex{stack} stack - alternativo per l'esecuzione del gestore (vedi - sez.~\ref{sec:sig_specific_features}).\\ + \var{sa\_sigaction} al posto di + \var{sa\_handler}.\\ + \const{SA\_NOCLDWAIT}& Se il segnale è \const{SIGCHLD} allora o processi + figli non divenire \textit{zombie} quando + terminano.\footnotemark \\ \hline \end{tabular} \caption{Valori del campo \var{sa\_flag} della struttura \struct{sigaction}.} \label{tab:sig_sa_flag} \end{table} +\footnotetext{questa funzionalità è stata introdotta nel kernel 2.6 e va a + modificare il comportamento di \func{waitpid}.} + % 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