X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=session.tex;h=eb7809e183adb222c9e630a8f008389d50a3f436;hb=fd4e2fd24a218ef56953fd5a58d0b3c0bee8acb7;hp=a1bbe4e93f1b7297b9d494237b9ae30babaf65a8;hpb=4cbeb0e4fa1d31da798c8e68108eb6785586ab34;p=gapil.git diff --git a/session.tex b/session.tex index a1bbe4e..eb7809e 100644 --- a/session.tex +++ b/session.tex @@ -170,7 +170,7 @@ i cui prototipi sono: esiste.} \end{functions} -La funzione \func{getpgid} permette di specificare il \acr{pid} del processo +La funzione \func{getpgid} permette di specificare il \ids{PID} del processo di cui si vuole sapere il \acr{pgid}; un valore nullo per \param{pid} restituisce il \acr{pgid} del processo corrente; \func{getpgrp} è di norma equivalente a \code{getpgid(0)}. @@ -207,7 +207,7 @@ processi dall'uno all'altro, ma sempre all'interno di una stessa sessione. Ciascun raggruppamento di processi ha sempre un processo principale, il cosiddetto \itindex{process~group~leader} \textit{process group leader}, che è -identificato dall'avere un \acr{pgid} uguale al suo \acr{pid}, in genere +identificato dall'avere un \acr{pgid} uguale al suo \ids{PID}, in genere questo è il primo processo del raggruppamento, che si incarica di lanciare tutti gli altri. Un nuovo raggruppamento si crea con la funzione \funcd{setpgrp},\footnote{questa è la definizione di POSIX.1, BSD definisce @@ -216,13 +216,13 @@ tutti gli altri. Un nuovo raggruppamento si crea con la funzione richiedere esplicitamente la compatibilità all'indietro con BSD, definendo la macro \macro{\_BSD\_SOURCE}.} il cui prototipo è: \begin{prototype}{unistd.h}{int setpgrp(void)} - Modifica il \acr{pgid} al valore del \acr{pid} del processo corrente. + Modifica il \acr{pgid} al valore del \ids{PID} del processo corrente. \bodydesc{La funzione restituisce il valore del nuovo \textit{process group}.} \end{prototype} -La funzione, assegnando al \acr{pgid} il valore del \acr{pid} processo +La funzione, assegnando al \acr{pgid} il valore del \ids{PID} processo corrente, rende questo \itindex{process~group~leader} \textit{group leader} di un nuovo raggruppamento, tutti i successivi processi da esso creati apparterranno (a meno di non cambiare di nuovo il \acr{pgid}) al nuovo @@ -251,7 +251,7 @@ ancora eseguito una \func{exec}.\footnote{questa caratteristica è implementata dal kernel che mantiene allo scopo un altro campo, \var{did\_exec}, in \struct{task\_struct}.} Specificando un valore nullo per \param{pid} si indica il processo corrente, mentre specificando un valore nullo per -\param{pgid} si imposta il \textit{process group} al valore del \acr{pid} del +\param{pgid} si imposta il \textit{process group} al valore del \ids{PID} del processo selezionato; pertanto \func{setpgrp} è equivalente a \code{setpgid(0, 0)}. @@ -275,15 +275,15 @@ sessione ad un processo è quello di crearne una nuova con l'uso di \bodydesc{La funzione ritorna il valore del nuovo \acr{sid}, e -1 in caso di errore, il solo errore possibile è \errval{EPERM}, che si ha quando il - \acr{pgid} e \acr{pid} del processo coincidono.} + \acr{pgid} e \ids{PID} del processo coincidono.} \end{prototype} La funzione imposta il \acr{pgid} ed il \acr{sid} del processo corrente al -valore del suo \acr{pid}, creando così una nuova sessione ed un nuovo +valore del suo \ids{PID}, creando così una nuova sessione ed un nuovo \textit{process group} di cui esso diventa leader (come per i \textit{process group} un processo si dice leader di sessione\footnote{in Linux la proprietà è mantenuta in maniera indipendente con un apposito campo \var{leader} in - \struct{task\_struct}.} se il suo \acr{sid} è uguale al suo \acr{pid}) ed + \struct{task\_struct}.} se il suo \acr{sid} è uguale al suo \ids{PID}) ed unico componente. Inoltre la funzione distacca il processo da ogni terminale di controllo (torneremo sull'argomento in sez.~\ref{sec:sess_ctrl_term}) cui fosse in precedenza associato. @@ -292,13 +292,13 @@ La funzione ha successo soltanto se il processo non è già \itindex{process~group~leader} leader di un \textit{process group}, per cui per usarla di norma si esegue una \func{fork} e si esce, per poi chiamare \func{setsid} nel processo figlio, in modo che, avendo questo lo stesso -\acr{pgid} del padre ma un \acr{pid} diverso, non ci siano possibilità di +\acr{pgid} del padre ma un \ids{PID} diverso, non ci siano possibilità di errore.\footnote{potrebbe sorgere il dubbio che, per il riutilizzo dei valori - dei \acr{pid} fatto nella creazione dei nuovi processi (vedi + dei \ids{PID} fatto nella creazione dei nuovi processi (vedi sez.~\ref{sec:proc_pid}), il figlio venga ad assumere un valore corrispondente ad un \textit{process group} esistente; questo viene evitato - dal kernel che considera come disponibili per un nuovo \acr{pid} solo valori - che non corrispondono ad altri \acr{pid}, \acr{pgid} o \acr{sid} in uso nel + dal kernel che considera come disponibili per un nuovo \ids{PID} solo valori + che non corrispondono ad altri \ids{PID}, \acr{pgid} o \acr{sid} in uso nel sistema.} Questa funzione viene usata di solito nel processo di login (per i dettagli vedi sez.~\ref{sec:sess_login}) per raggruppare in una sessione tutti i comandi eseguiti da un utente dalla sua shell. @@ -601,8 +601,8 @@ provvede a costruire gli opportuni valori per le variabili di ambiente, come \texttt{HOME}, \texttt{SHELL}, ecc. Infine attraverso l'uso di \func{setuid}, \func{setgid} e \func{initgroups} verrà cambiata l'identità del proprietario del processo, infatti, come spiegato in sez.~\ref{sec:proc_setuid}, avendo -invocato tali funzioni con i privilegi di amministratore, tutti gli user-ID ed -i group-ID (reali, effettivi e salvati) saranno impostati a quelli +invocato tali funzioni con i privilegi di amministratore, tutti gli \ids{UID} +ed i \ids{GID} (reali, effettivi e salvati) saranno impostati a quelli dell'utente. A questo punto \cmd{login} provvederà (fatte salve eventuali altre azioni @@ -660,7 +660,7 @@ occorrerà predisporlo in modo che esso compia le seguenti azioni: \item Eseguire una \func{fork} e terminare immediatamente il processo padre proseguendo l'esecuzione nel figlio. In questo modo si ha la certezza che il figlio non è un \itindex{process~group~leader} \textit{process group - leader}, (avrà il \acr{pgid} del padre, ma un \acr{pid} diverso) e si può + leader}, (avrà il \acr{pgid} del padre, ma un \ids{PID} diverso) e si può chiamare \func{setsid} con successo. Inoltre la shell considererà terminato il comando all'uscita del padre. \item Eseguire \func{setsid} per creare una nuova sessione ed un nuovo @@ -852,7 +852,7 @@ tab.~\ref{tab:sess_openlog_option}. sistema del \textit{syslog}.\\ \const{LOG\_PERROR} & Stampa anche su \file{stderr} (non previsto in POSIX.1-2001).\\ -\const{LOG\_PID} & Inserisce nei messaggi il \acr{pid} del processo +\const{LOG\_PID} & Inserisce nei messaggi il \ids{PID} del processo chiamante.\\ \hline \end{tabular} @@ -922,7 +922,7 @@ Una funzione sostanzialmente identica a \func{syslog}, la cui sola differenza è prendere invece di una lista esplicita di argomenti un unico argomento finale nella forma di una lista di argomenti passato come \macro{va\_list}, utile qualora si ottengano questi nella invocazione di una funzione -\index{variadic} \textit{variadic} (si rammenti quanto visto in +\index{funzioni!variadic} \textit{variadic} (si rammenti quanto visto in sez.~\ref{sec:proc_variadic}), è \funcd{vsyslog},\footnote{la funzione è originaria di BSD e per utilizzarla deve essere definito \macro{\_BSD\_SOURCE}.} il suo prototipo è: @@ -957,10 +957,10 @@ valore nullo per \param{mask} la maschera corrente non viene modificata; in questo modo si può leggere il valore della maschera corrente. Indicando un valore non nullo per \param{mask} la registrazione dei messaggi viene disabilitata per tutte quelle priorità che non rientrano nella maschera. In -genere il valore viene impostato usando la macro \macro{LOG\_MASK(p)} dove -\code{p} è una delle costanti di tab.~\ref{tab:sess_syslog_priority}. É -inoltre disponibile anche la macro \macro{LOG\_UPTO(p)} che permette di -specificare automaticamente tutte le priorità fino a quella indicata da +genere il valore viene impostato usando la macro \macro{LOG\_MASK}\texttt{(p)} +dove \code{p} è una delle costanti di tab.~\ref{tab:sess_syslog_priority}. É +inoltre disponibile anche la macro \macro{LOG\_UPTO}\texttt{(p)} che permette +di specificare automaticamente tutte le priorità fino a quella indicata da \code{p}. Una volta che si sia certi che non si intende registrare più nessun messaggio @@ -1022,7 +1022,7 @@ vederli anche in caso di blocco totale del sistema (nell'assunzione che la console sia collegata). In particolare la stampa dei messaggi sulla console è controllata dal -contenuto del file \procfile{/proc/sys/kernel/printk} (o con l'equivalente +contenuto del file \sysctlfile{kernel/printk} (o con l'equivalente parametro di \func{sysctl}) che prevede quattro valori numerici interi: il primo (\textit{console\_loglevel}) indica la priorità corrente oltre la quale vengono stampati i messaggi sulla console, il secondo @@ -1143,7 +1143,7 @@ e la funzione ritorna un valore nullo. Le operazioni corrispondenti ai valori 6, 7 ed 8 consentono di modificare la priorità oltre la quale i messaggi vengono stampati direttamente sulla \textit{console} e fanno riferimento ai parametri del kernel gestiti con le -variabili contenute in \procfile{/proc/sys/kernel/printk} di cui abbiamo +variabili contenute in \sysctlfile{kernel/printk} di cui abbiamo parlato prima, ed in particolare con 6 si imposta come corrente il valore minimo della terza variabile (\textit{minimum\_console\_level}), ottenendo l'effetto di ridurre al minimo i messaggi che arrivano in console, mentre con