Revisione dei messaggi di errore
[gapil.git] / session.tex
index 97c9a433e1a3e807da1f90cb1f9a225fadb75b95..7b7b738c1be28baa175c0487c699f66a07199f24 100644 (file)
@@ -17,7 +17,7 @@ Viene comunemente chiamato \textit{job control} quell'insieme di funzionalit
 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. 
@@ -35,7 +35,7 @@ del kernel; in particolare il kernel deve assicurare sia la presenza di un
 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
@@ -74,7 +74,7 @@ possono accedervi. Il job control prevede che quando un processo appartenente
 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
@@ -120,13 +120,13 @@ i cui prototipi sono:
   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
@@ -154,9 +154,43 @@ processo con lo stesso valore che hanno nel processo padre, per cui un
 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