sessione.
Oltre al \acr{pid} e al \acr{ppid}, (e a quelli che vedremo in
-\secref{sec:sess_xxx}, relativi al controllo di sessione), ad ogni processo
-vengono associati degli altri identificatori che vengono usati per il
+\secref{sec:sess_proc_group}, relativi al controllo di sessione), ad ogni
+processo vengono associati degli altri identificatori che vengono usati per il
controllo di accesso. Questi servono per determinare se un processo può
eseguire o meno le operazioni richieste, a seconda dei privilegi e
dell'identità di chi lo ha posto in esecuzione; l'argomento è complesso e sarà
\secref{sec:proc_access_id}).
\item gli identificatori per il controllo di sessione: il \textit{process
groupid} e il \textit{session id} ed il terminale di controllo (vedi
- \secref{sec:sess_xxx} e \secref{sec:sess_xxx}).
+ \secref{sec:sess_proc_group}).
\item la directory di lavoro e la directory radice (vedi
\secref{sec:file_work_dir} e \secref{sec:file_chroot}).
\item la maschera dei permessi di creazione (vedi \secref{sec:file_umask}).
\item la maschera dei segnali bloccati (vedi \secref{sec:sig_sigmask}) e le
azioni installate (vedi \secref{sec:sig_gen_beha}).
\item i segmenti di memoria condivisa agganciati al processo (vedi
-\secref{sec:ipc_shar_mem}).
+ \secref{sec:ipc_sysv_shm}).
\item i limiti sulle risorse (vedi \secref{sec:sys_resource_limit}).
\item le variabili di ambiente (vedi \secref{sec:proc_environ}).
\end{itemize*}
Per questo motivo lo standard POSIX.1 ha introdotto la funzione \func{waitpid}
che effettua lo stesso servizio, ma dispone di una serie di funzionalità più
-ampie, legate anche al controllo di sessione. Dato che è possibile ottenere
-lo stesso comportamento di \func{wait} si consiglia di utilizzare sempre
-questa funzione, il cui prototipo è:
+ampie, legate anche al controllo di sessione (si veda
+\ref{sec:sess_job_control}). Dato che è possibile ottenere lo stesso
+comportamento di \func{wait} si consiglia di utilizzare sempre questa
+funzione, il cui prototipo è:
\begin{functions}
\headdecl{sys/types.h}
\headdecl{sys/wait.h}
possibilità si specificare un'opzione \macro{WNOHANG} che ne previene il
blocco; inoltre \func{waitpid} può specificare quale processo attendere sulla
base del valore fornito dall'argomento \param{pid}, secondo lo
-specchietto riportato in \ntab:
+specchietto riportato in \tabref{tab:proc_waidpid_pid}:
\begin{table}[!htb]
\centering
\footnotesize
\textbf{Valore} & \textbf{Macro} &\textbf{Significato}\\
\hline
\hline
- $<-1$& -- & attende per un figlio il cui \textit{process group} è uguale al
+ $<-1$& -- & attende per un figlio il cui \textit{process group} (vedi
+ \secref{sec:sess_proc_group}) è uguale al
valore assoluto di \var{pid}. \\
$-1$ & \macro{WAIT\_ANY} & attende per un figlio qualsiasi, usata in
questa maniera è equivalente a \func{wait}.\\
delle opportune opzioni tramite l'argomento \param{option}. I valori possibili
sono il già citato \macro{WNOHANG}, che previene il blocco della funzione
quando il processo figlio non è terminato, e \macro{WUNTRACED} (usata per il
-controllo di sessione, trattato in \capref{cha:session}) che fa ritornare la
-funzione anche per i processi figli che sono bloccati ed il cui stato non è
-stato ancora riportato al padre. Il valore dell'opzione deve essere
-specificato come maschera binaria ottenuta con l'OR delle suddette costanti
-con zero.
+controllo di sessione, trattato in \secref{sec:sess_job_control}) che fa
+ritornare la funzione anche per i processi figli che sono bloccati ed il cui
+stato non è stato ancora riportato al padre. Il valore dell'opzione deve
+essere specificato come maschera binaria ottenuta con l'OR delle suddette
+costanti con zero. In Linux sono previste altre opzioni non standard relative
+al comportamento con i thread, che saranno trattate in
+\secref{sec:thread_xxx}.
La terminazione di un processo figlio è chiaramente un evento asincrono
rispetto all'esecuzione di un programma e può avvenire in un qualunque
argomento. I parametri successivi consentono di specificare gli argomenti a
linea di comando e l'ambiente ricevuti dal nuovo processo.
-\bodydesc{Queste funzioni ritornano solo in caso di errore, restituendo
- -1; nel qual caso \var{errno} andrà ad assumere i valori visti in
- precedenza per \func{execve}.}
+\bodydesc{Queste funzioni ritornano solo in caso di errore, restituendo -1;
+ nel qual caso \var{errno} assumerà i valori visti in precedenza per
+ \func{execve}.}
\end{functions}
Per capire meglio le differenze fra le funzioni della famiglia si può fare
(\acr{ppid}).
\item l'\textsl{userid reale}, il \textit{groupid reale} ed i \textsl{groupid
supplementari} (vedi \secref{sec:proc_access_id}).
-\item il \textit{session id} ed il \textit{process groupid} (vedi
- \secref{sec:sess_xxx}).
-\item il terminale di controllo (vedi \secref{sec:sess_xxx}).
+\item il \textit{session id} (\acr{sid}) ed il \textit{process groupid}
+ (\acr{pgid}), vedi \secref{sec:sess_proc_group}.
+\item il terminale di controllo (vedi \secref{sec:sess_ctrl_term}).
\item il tempo restante ad un allarme (vedi \secref{sec:sig_alarm_abort}).
\item la directory radice e la directory di lavoro corrente (vedi
\secref{sec:file_work_dir}).
\param{size}.
\bodydesc{La funzione restituisce il numero di gruppi letti in caso di
- successo e -1 in caso di fallimento, nel qual caso \var{errno} viene
- impostata a:
+ successo e -1 in caso di fallimento, nel qual caso \var{errno} assumerà
+ i valori:
\begin{errlist}
\item[\macro{EFAULT}] \param{list} non ha un indirizzo valido.
\item[\macro{EINVAL}] il valore di \param{size} è diverso da zero ma
supplementari del processo ai valori specificati in \param{list}.
\bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
- fallimento, nel qual caso \var{errno} viene impostata a:
+ fallimento, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
\item[\macro{EFAULT}] \param{list} non ha un indirizzo valido.
\item[\macro{EPERM}] il processo non ha i privilegi di amministratore.
aggiungendo il gruppo addizionale \param{group}.
\bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
- fallimento, nel qual caso \var{errno} viene impostata agli stessi valori di
+ fallimento, nel qual caso \var{errno} assumerà gli stessi valori di
\func{setgroups} più \macro{ENOMEM} quando non c'è memoria sufficiente per
allocare lo spazio per informazioni dei gruppi.}
\end{functions}
condivisa. In questi casi, se non si dispone della possibilità di eseguire
atomicamente le operazioni necessarie, occorre che quelle parti di codice in
cui si compiono le operazioni sulle risorse condivise (le cosiddette
-\textsl{sezioni critiche}) del programma, siano opportunamente protette da
-meccanismi di sincronizzazione (torneremo su queste problematiche di questo
-tipo in \secref{sec:ipc_semaph}).
+\textsl{sezioni critiche}\index{sezioni critiche}) del programma, siano
+opportunamente protette da meccanismi di sincronizzazione (torneremo su queste
+problematiche di questo tipo in \capref{cha:IPC}).
Un caso particolare di \textit{race condition} sono poi i cosiddetti
\textit{deadlock}, particolarmente gravi in quanto comportano spesso il blocco