per far questo vengono utilizzati due ulteriori identificatori (oltre quelli
visti in sez.~\ref{sec:proc_pid}) che il kernel associa a ciascun
processo:\footnote{in Linux questi identificatori sono mantenuti nei campi
- \var{pgrp} e \var{session} della struttura \struct{task\_struct} definita in
- \file{sched.h}.} l'identificatore del \textit{process group} e
-l'identificatore della \textsl{sessione}, che vengono indicati rispettivamente
-con le sigle \acr{pgid} e \acr{sid}, e sono mantenuti in variabili di tipo
-\type{pid\_t}. I valori di questi identificatori possono essere visualizzati
-dal comando \cmd{ps} usando l'opzione \cmd{-j}.
+ \var{pgrp} e \var{session} della struttura \kstruct{task\_struct} definita
+ in \file{include/linux/sched.h}.} l'identificatore del \textit{process
+ group} e l'identificatore della \textsl{sessione}, che vengono indicati
+rispettivamente con le sigle \acr{pgid} e \acr{sid}, e sono mantenuti in
+variabili di tipo \type{pid\_t}. I valori di questi identificatori possono
+essere visualizzati dal comando \cmd{ps} usando l'opzione \cmd{-j}.
Un \textit{process group} è pertanto definito da tutti i processi che hanno lo
stesso \acr{pgid}; è possibile leggere il valore di questo identificatore con
il programma \cmd{login} con una \func{exevle}, passando come argomento la
stringa con il nome, ed un ambiente opportunamente costruito che contenga
quanto necessario; ad esempio di solito viene opportunamente inizializzata la
-variabile di ambiente \texttt{TERM} per identificare il terminale su cui si
+variabile di ambiente \envvar{TERM} per identificare il terminale su cui si
sta operando, a beneficio dei programmi che verranno lanciati in seguito.
A sua volta \cmd{login}, che mantiene i privilegi di amministratore, usa il
rilanciare un'altra istanza di \cmd{getty}.
Se invece la password corrisponde \cmd{login} esegue \func{chdir} per
-impostare come directory di lavoro la \textit{home directory} dell'utente,
-cambia i diritti di accesso al terminale (con \func{chown} e \func{chmod}) per
-assegnarne la titolarità all'utente ed al suo gruppo principale, assegnandogli
-al contempo i diritti di lettura e scrittura.\footnote{oggi queste operazioni,
- insieme ad altre relative alla contabilità ed alla tracciatura degli
- accessi, vengono gestite dalle distribuzioni più recenti in una maniera
- generica appoggiandosi a servizi di sistema come \textit{ConsoleKit}, ma il
- concetto generale resta sostanzialmente lo stesso.} Inoltre il programma
-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 \ids{UID}
-ed i \ids{GID} (reali, effettivi e salvati) saranno impostati a quelli
-dell'utente.
+impostare come \index{directory~di~lavoro} directory di lavoro la \textit{home
+ directory} dell'utente, cambia i diritti di accesso al terminale (con
+\func{chown} e \func{chmod}) per assegnarne la titolarità all'utente ed al suo
+gruppo principale, assegnandogli al contempo i diritti di lettura e
+scrittura.\footnote{oggi queste operazioni, insieme ad altre relative alla
+ contabilità ed alla tracciatura degli accessi, vengono gestite dalle
+ distribuzioni più recenti in una maniera generica appoggiandosi a servizi di
+ sistema come \textit{ConsoleKit}, ma il concetto generale resta
+ sostanzialmente lo stesso.} Inoltre il programma provvede a costruire gli
+opportuni valori per le variabili di ambiente, come \envvar{HOME},
+\envvar{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 \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
iniziali, come la stampa di messaggi di benvenuto o il controllo della posta)
eseguendo una ulteriore \func{fork} uscendo nel padre e proseguendo nel
figlio. In questo caso, non essendo più quest'ultimo un leader di sessione
non potrà ottenere automaticamente un terminale di controllo.
-\item Eseguire una \func{chdir} per impostare la directory di lavoro del
- processo (su \file{/} o su una directory che contenga dei file necessari per
- il programma), per evitare che la directory da cui si è lanciato il processo
- resti in uso e non sia possibile rimuoverla o smontare il filesystem che la
- contiene.
+\item Eseguire una \func{chdir} per impostare la \index{directory~di~lavoro}
+ directory di lavoro del processo (su \file{/} o su una directory che
+ contenga dei file necessari per il programma), per evitare che la directory
+ da cui si è lanciato il processo resti in uso e non sia possibile rimuoverla
+ o smontare il filesystem che la contiene.
\item Impostare la \itindex{umask} maschera dei permessi (di solito con
\code{umask(0)}) in modo da non essere dipendenti dal valore ereditato da
chi ha lanciato originariamente il processo.
padre, mentre l'esecuzione prosegue nel figlio che esegue subito una
\func{setsid}. In questo modo si compiono automaticamente i passi 1 e 2 della
precedente lista. Se \param{nochdir} è nullo la funzione imposta anche la
-directory di lavoro su \file{/}, se \param{noclose} è nullo i file standard
-vengono rediretti su \file{/dev/null} (corrispondenti ai passi 4 e 6); in caso
-di valori non nulli non viene eseguita nessuna altra azione.
+\index{directory~di~lavoro} directory di lavoro su \file{/},
+se \param{noclose} è nullo i file standard vengono rediretti su
+\file{/dev/null} (corrispondenti ai passi 4 e 6); in caso di valori non nulli
+non viene eseguita nessuna altra azione.
Dato che un programma demone non può più accedere al terminale, si pone il
problema di come fare per la notifica di eventuali errori, non potendosi più
\normalsize
\caption{Definizione delle stringhe coi relativi valori numerici che
indicano le priorità dei messaggi del kernel (ripresa da
- \texttt{linux/kernel.h}).}
+ \file{include/linux/kernel.h}).}
\label{fig:printk_priority}
\end{figure}
\texttt{syslog}, ma dato il conflitto di nomi questa viene rimappata su
un'altra funzione di libreria, in particolare nelle \acr{glibc} essa viene
invocata tramite la funzione \funcd{klogctl},\footnote{nelle \acr{libc4} e
- nelle \acr{libc5} la funzione invece era \func{SYS\_klog}.} il cui prototipo
+ nelle \acr{libc5} la funzione invece era \code{SYS\_klog}.} il cui prototipo
è:
\begin{prototype}{sys/klog.h}{int klogctl(int op, char *buffer, int len)}
sez.~\ref{sec:sys_characteristics} che indica la dimensione che deve avere
una stringa per poter contenere il nome di un terminale.} caratteri.
-Si tenga presente che il \itindex{pathname} \textit{pathname} restituito dalla
-funzione potrebbe non identificare univocamente il terminale (ad esempio
-potrebbe essere \file{/dev/tty}), inoltre non è detto che il processo possa
-effettivamente essere in grado di aprire il terminale.
+Si tenga presente che il \textit{pathname} restituito dalla funzione potrebbe
+non identificare univocamente il terminale (ad esempio potrebbe essere
+\file{/dev/tty}), inoltre non è detto che il processo possa effettivamente
+essere in grado di aprire il terminale.
I vari attributi associati ad un terminale vengono mantenuti per ciascuno di
essi in una struttura \struct{termios} che viene usata dalle varie funzioni