il cui scopo è quello di permettere ad un utente di poter sfruttare le
capacità multitasking di un sistema Unix per eseguire in contemporanea più
processi, pur potendo accedere, di solito, ad un solo terminale,\footnote{con
- X e con i terminali vituali tutto questo non è più vero, dato che si può
+ X e con i terminali virtuali tutto questo non è più vero, dato che si può
accedere a molti terminali in contemporanea, ma il sistema è nato prima
dell'esistenza di tutto ciò.} avendo cioè un solo punto in cui si può avere
accesso all'input ed all'output degli stessi.
driver per i terminali abilitato al \textit{job control} che quella dei
relativi segnali illustrati in \secref{sec:sig_job_control}.
-In un sistema che supporta il \textit{job cotrol} una volta completato il
+In un sistema che supporta il \textit{job control} una volta completato il
login (che esamineremo in dettaglio in \secref{sec:sess_login}), l'utente avrà
a disposizione una shell dalla quale eseguire i comandi e potrà iniziare
quella che viene chiamata una \textsl{sessione}, che riunisce (vedi
ad un raggruppamento in \textit{background} cerca di accedere al terminale
questo invii a tutti i processi del raggruppamento un segnale di
\macro{SIGTTIN} o di \macro{SIGTTOU}, a seconda che l'accesso sia
-rispettivamente in lettura o scrittura, bloccando (secondo il comportamenento
+rispettivamente in lettura o scrittura, bloccando (secondo il comportamento
di default esposto in \secref{sec:sig_job_control}) i processi.
Un comportamento analogo sia ha anche per i segnali generati dai comandi di
Legge il \acr{pgid} del processo corrente.
\bodydesc{Le funzioni restituiscono il \acr{pgid} del processo,
- \func{getpgrp} ha sempre successo, mentre \func{getpgid} restitusce -1
+ \func{getpgrp} ha sempre successo, mentre \func{getpgid} restituisce -1
ponendo \var{errno} a \macro{ESRCH} se il processo selezionato non esiste.}
\end{functions}
La funzione \func{getpgid} permette di specificare il \acr{pid} del processo
di cui si vuole sapere il \acr{pgid}; un valore nullo per \param{pid}
-restiruisce il \acr{pgid} del processo corrente; \func{getpgrp} è di norma
+restituisce il \acr{pgid} del processo corrente; \func{getpgrp} è di norma
equivalente a \code{getpgid(0)}.
In maniera analoga l'identificatore della sessione può essere letto dalla
processo appena creato appartiene sempre allo stesso raggruppamento e alla
stessa sessione del padre.
-Ciascun gruppo di processi ha sempre un processo principale, il
-\textit{process leader}, che è quello che è identificato dall'avere il suo
-\acr{pgid} uguale al \acr{pid}, per
+Ciascun gruppo di processi ha sempre un processo principale, il cosiddetto
+\textit{process leader}, che è identificato dall'avere un \acr{pgid} uguale al
+suo \acr{pid}, in genere questo è il primo processo del gruppo, che si
+incarica di lanciare tutti gli altri. Un nuovo gruppo si crea con la funzione
+\func{setpgrp},\footnote{questa è la definizione di POSIX.1, BSD definisce una
+ funzione con lo stesso nome, che però è identica a \func{setpgid}; nelle
+ \acr{glibc} viene sempre usata sempre questa definizione, a meno di non
+ 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.
+
+ \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
+corrente, rende questo \textit{process leader} di un nuovo gruppo, tutti i
+successivi processi da esso creati apparterranno (a meno di non cambiare di
+nuovo il \acr{pgid}) al nuovo gruppo. È possibile invece spostare un processo
+da un gruppo ad un altro con la funzione \func{setpgid}, il cui prototipo è:
+\begin{prototype}{unistd.h}{int setpgid(pid\_t pid, pid\_t pgid)}
+ Assegna al \acr{pgid} del processo \param{pid} il valore \param{pgid}.
+
+ \bodydesc{La funzione ritorna il valore del nuovo \textit{process group}, e
+ -1 in caso di errore, nel qual caso \var{errno} assumerà i valori:
+ \begin{errlist}
+ \item[\macro{ESRCH}] Il processo selezionato non esiste.
+ \item[\macro{EPERM}] Il processo selezionato non fa parte della stessa
+ sessione del processo corrente.
+ \end{errlist}
+ }
+\end{prototype}
+
+
+
+
La differenza fra i due identificatori è che un processo
può cambiare \acr{pgid} soltanto ad un valore che corrisponda al