Piccole correzioni ed aggiunte
[gapil.git] / prochand.tex
index d2b4391dcdbb637decd39a3e7eeb40a153d5f560..7d4f4744f61269f65013c2fb70805705e9db8468 100644 (file)
@@ -25,7 +25,7 @@ finale introdurremo alcune problematiche generiche della programmazione in
 ambiente multitasking.
 
 
 ambiente multitasking.
 
 
-\section{Le funzioni di base}% della gestione dei processi}
+\section{Le funzioni di base della gestione dei processi}
 \label{sec:proc_handling}
 
 In questa sezione tratteremo le problematiche della gestione dei processi
 \label{sec:proc_handling}
 
 In questa sezione tratteremo le problematiche della gestione dei processi
@@ -136,7 +136,7 @@ che è progenitore di tutti gli altri processi.\footnote{in realtà questo non 
 Il kernel mantiene una tabella dei processi attivi, la cosiddetta
 \itindex{process~table} \textit{process table}. Per ciascun processo viene
 mantenuta una voce in questa tabella, costituita da una struttura
 Il kernel mantiene una tabella dei processi attivi, la cosiddetta
 \itindex{process~table} \textit{process table}. Per ciascun processo viene
 mantenuta una voce in questa tabella, costituita da una struttura
-\struct{task\_struct}, che contiene tutte le informazioni rilevanti per quel
+\kstruct{task\_struct}, che contiene tutte le informazioni rilevanti per quel
 processo. Tutte le strutture usate a questo scopo sono dichiarate
 nell'\textit{header file} \file{linux/sched.h}, ed uno schema semplificato,
 che riporta la struttura delle principali informazioni contenute nella
 processo. Tutte le strutture usate a questo scopo sono dichiarate
 nell'\textit{header file} \file{linux/sched.h}, ed uno schema semplificato,
 che riporta la struttura delle principali informazioni contenute nella
@@ -208,7 +208,7 @@ riparte dal numero più basso disponibile a partire da un minimo di
   kernel, con il 2.6.x e la nuova interfaccia per i \itindex{thread}
   \textit{thread} anche il meccanismo di allocazione dei \acr{pid} è stato
   modificato ed il valore massimo è impostabile attraverso il file
   kernel, con il 2.6.x e la nuova interfaccia per i \itindex{thread}
   \textit{thread} anche il meccanismo di allocazione dei \acr{pid} è stato
   modificato ed il valore massimo è impostabile attraverso il file
-  \procfile{/proc/sys/kernel/pid\_max} e di default vale 32768.} che serve a
+  \sysctlfile{kernel/pid\_max} e di default vale 32768.} che serve a
 riservare i \acr{pid} più bassi ai processi eseguiti direttamente dal kernel.
 Per questo motivo, come visto in sez.~\ref{sec:proc_hierarchy}, il processo di
 avvio (\cmd{init}) ha sempre il \acr{pid} uguale a uno.
 riservare i \acr{pid} più bassi ai processi eseguiti direttamente dal kernel.
 Per questo motivo, come visto in sez.~\ref{sec:proc_hierarchy}, il processo di
 avvio (\cmd{init}) ha sempre il \acr{pid} uguale a uno.
@@ -697,9 +697,9 @@ di vista di come il sistema gestisce la conclusione dei processi.
 
 Abbiamo visto in sez.~\ref{sec:proc_conclusion} le tre modalità con cui un
 programma viene terminato in maniera normale: la chiamata di \func{exit}, che
 
 Abbiamo visto in sez.~\ref{sec:proc_conclusion} le tre modalità con cui un
 programma viene terminato in maniera normale: la chiamata di \func{exit}, che
-esegue le funzioni registrate per l'uscita e chiude i \textit{file stream} e
-poi esegue \func{\_exit}, il ritorno dalla funzione \func{main} equivalente
-alla chiamata di \func{exit}, e la chiamata diretta a \func{\_exit}, che passa
+esegue le funzioni registrate per l'uscita e chiude gli \textit{stream} e poi
+esegue \func{\_exit}, il ritorno dalla funzione \func{main} equivalente alla
+chiamata di \func{exit}, e la chiamata diretta a \func{\_exit}, che passa
 direttamente alle operazioni di terminazione del processo da parte del kernel.
 
 Ma abbiamo accennato che oltre alla conclusione normale esistono anche delle
 direttamente alle operazioni di terminazione del processo da parte del kernel.
 
 Ma abbiamo accennato che oltre alla conclusione normale esistono anche delle
@@ -960,10 +960,10 @@ comportamento di \func{wait}\footnote{in effetti il codice
   processo non è uscito e $-1$ per un errore, nel qual caso \var{errno}
   assumerà uno dei valori:
   \begin{errlist}
   processo non è uscito e $-1$ per un errore, nel qual caso \var{errno}
   assumerà uno dei valori:
   \begin{errlist}
-  \item[\errcode{EINTR}] non è stata specificata l'opzione \const{WNOHANG} e
-    la funzione è stata interrotta da un segnale.
   \item[\errcode{ECHILD}] il processo specificato da \param{pid} non esiste o
     non è figlio del processo chiamante.
   \item[\errcode{ECHILD}] il processo specificato da \param{pid} non esiste o
     non è figlio del processo chiamante.
+  \item[\errcode{EINTR}] non è stata specificata l'opzione \const{WNOHANG} e
+    la funzione è stata interrotta da un segnale.
   \item[\errcode{EINVAL}] si è specificato un valore non valido per
     l'argomento \param{options}.
   \end{errlist}}
   \item[\errcode{EINVAL}] si è specificato un valore non valido per
     l'argomento \param{options}.
   \end{errlist}}
@@ -1137,38 +1137,43 @@ anomala), uno per indicare se è stato generato un \itindex{core~dump}
     \textbf{Macro} & \textbf{Descrizione}\\
     \hline
     \hline
     \textbf{Macro} & \textbf{Descrizione}\\
     \hline
     \hline
-    \macro{WIFEXITED(s)}   & Condizione vera (valore non nullo) per un processo
-                             figlio che sia terminato normalmente. \\
-    \macro{WEXITSTATUS(s)} & Restituisce gli otto bit meno significativi dello
-                             stato di uscita del processo (passato attraverso
-                             \func{\_exit}, \func{exit} o come valore di
-                             ritorno di \func{main}); può essere valutata solo
-                             se \val{WIFEXITED} ha restituito un valore non
-                             nullo.\\ 
-    \macro{WIFSIGNALED(s)} & Condizione vera se il processo figlio è terminato
-                             in maniera anomala a causa di un segnale che non
-                             è stato catturato (vedi
-                             sez.~\ref{sec:sig_notification}).\\ 
-    \macro{WTERMSIG(s)}    & Restituisce il numero del segnale che ha causato
-                             la terminazione anomala del processo; può essere
-                             valutata solo se \val{WIFSIGNALED} ha restituito
-                             un valore non nullo.\\ 
-    \macro{WCOREDUMP(s)}   & Vera se il processo terminato ha generato un
-                             file di \itindex{core~dump} \textit{core
-                               dump}; può essere valutata solo se
-                             \val{WIFSIGNALED} ha restituito un valore non
-                             nullo.\footnotemark \\
-    \macro{WIFSTOPPED(s)}  & Vera se il processo che ha causato il ritorno di
-                             \func{waitpid} è bloccato; l'uso è possibile solo
-                             con \func{waitpid} avendo specificato l'opzione
-                             \const{WUNTRACED}.\\
-    \macro{WSTOPSIG(s)}    & Restituisce il numero del segnale che ha bloccato
-                             il processo; può essere valutata solo se
-                             \val{WIFSTOPPED} ha restituito un valore non
-                             nullo. \\ 
-    \macro{WIFCONTINUED(s)}& Vera se il processo che ha causato il ritorno è
-                             stato riavviato da un \signal{SIGCONT}
-                             (disponibile solo a partire dal kernel 2.6.10).\\
+    \macro{WIFEXITED}\texttt{(s)}   & Condizione vera (valore non nullo) per
+                                      un processo figlio che sia terminato
+                                      normalmente. \\ 
+    \macro{WEXITSTATUS}\texttt{(s)} & Restituisce gli otto bit meno
+                                      significativi dello stato di uscita del
+                                      processo (passato attraverso
+                                      \func{\_exit}, \func{exit} o come valore
+                                      di ritorno di \func{main}); può essere
+                                      valutata solo se \val{WIFEXITED} ha
+                                      restituito un valore non nullo.\\ 
+    \macro{WIFSIGNALED}\texttt{(s)} & Condizione vera se il processo figlio è
+                                      terminato in maniera anomala a causa di
+                                      un segnale che non è stato catturato
+                                      (vedi sez.~\ref{sec:sig_notification}).\\ 
+    \macro{WTERMSIG}\texttt{(s)}    & Restituisce il numero del segnale che ha
+                                      causato la terminazione anomala del
+                                      processo; può essere valutata solo se
+                                      \val{WIFSIGNALED} ha restituito un
+                                      valore non nullo.\\
+    \macro{WCOREDUMP}\texttt{(s)}   & Vera se il processo terminato ha
+                                      generato un file di \itindex{core~dump}
+                                      \textit{core dump}; può essere valutata
+                                      solo se \val{WIFSIGNALED} ha restituito
+                                      un valore non nullo.\footnotemark \\
+    \macro{WIFSTOPPED}\texttt{(s)}  & Vera se il processo che ha causato il
+                                      ritorno di \func{waitpid} è bloccato;
+                                      l'uso è possibile solo con
+                                      \func{waitpid} avendo specificato
+                                      l'opzione \const{WUNTRACED}.\\
+    \macro{WSTOPSIG}\texttt{(s)}    & Restituisce il numero del segnale che ha
+                                      bloccato il processo; può essere
+                                      valutata solo se \val{WIFSTOPPED} ha
+                                      restituito un valore non nullo. \\ 
+    \macro{WIFCONTINUED}\texttt{(s)}& Vera se il processo che ha causato il
+                                      ritorno è stato riavviato da un
+                                      \signal{SIGCONT} (disponibile solo a
+                                      partire dal kernel 2.6.10).\\
     \hline
   \end{tabular}
   \caption{Descrizione delle varie macro di preprocessore utilizzabili per 
     \hline
   \end{tabular}
   \caption{Descrizione delle varie macro di preprocessore utilizzabili per 
@@ -1209,10 +1214,10 @@ suo prototipo è:
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
   caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
   caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\errcode{EINTR}] non è stata specificata l'opzione \const{WNOHANG} e
-    la funzione è stata interrotta da un segnale.
   \item[\errcode{ECHILD}] il processo specificato da \param{pid} non esiste o
     non è figlio del processo chiamante.
   \item[\errcode{ECHILD}] il processo specificato da \param{pid} non esiste o
     non è figlio del processo chiamante.
+  \item[\errcode{EINTR}] non è stata specificata l'opzione \const{WNOHANG} e
+    la funzione è stata interrotta da un segnale.
   \item[\errcode{EINVAL}] si è specificato un valore non valido per
     l'argomento \param{options}.
   \end{errlist}}
   \item[\errcode{EINVAL}] si è specificato un valore non valido per
     l'argomento \param{options}.
   \end{errlist}}
@@ -1386,27 +1391,25 @@ prototipo è:
     eseguibili, o il file è su un filesystem montato con l'opzione
     \cmd{noexec}, o manca  il permesso di attraversamento di una delle
     directory del pathname.
     eseguibili, o il file è su un filesystem montato con l'opzione
     \cmd{noexec}, o manca  il permesso di attraversamento di una delle
     directory del pathname.
-  \item[\errcode{EPERM}] il file ha i bit \itindex{suid~bit} \acr{suid} o
-    \itindex{sgid~bit} \acr{sgid} e l'utente non è root, ed il processo viene
-    tracciato, oppure il filesystem è montato con l'opzione \cmd{nosuid}.
+  \item[\errcode{EINVAL}] l'eseguibile ELF ha più di un segmento
+    \const{PF\_INTERP}, cioè chiede di essere eseguito da più di un
+    interprete.
+  \item[\errcode{ELIBBAD}] un interprete ELF non è in un formato
+    riconoscibile.
   \item[\errcode{ENOEXEC}] il file è in un formato non eseguibile o non
     riconosciuto come tale, o compilato per un'altra architettura.
   \item[\errcode{ENOENT}] il file o una delle librerie dinamiche o l'interprete
     necessari per eseguirlo non esistono.
   \item[\errcode{ENOEXEC}] il file è in un formato non eseguibile o non
     riconosciuto come tale, o compilato per un'altra architettura.
   \item[\errcode{ENOENT}] il file o una delle librerie dinamiche o l'interprete
     necessari per eseguirlo non esistono.
+  \item[\errcode{EPERM}] il file ha i bit \itindex{suid~bit} \acr{suid} o
+    \itindex{sgid~bit} \acr{sgid} e l'utente non è root, ed il processo viene
+    tracciato, oppure il filesystem è montato con l'opzione \cmd{nosuid}.
   \item[\errcode{ETXTBSY}] l'eseguibile è aperto in scrittura da uno o più
     processi. 
   \item[\errcode{ETXTBSY}] l'eseguibile è aperto in scrittura da uno o più
     processi. 
-  \item[\errcode{EINVAL}] l'eseguibile ELF ha più di un segmento
-    \const{PF\_INTERP}, cioè chiede di essere eseguito da più di un
-    interprete.
-  \item[\errcode{ELIBBAD}] un interprete ELF non è in un formato
-    riconoscibile.
   \item[\errcode{E2BIG}] la lista degli argomenti è troppo grande.
   \end{errlist}
   \item[\errcode{E2BIG}] la lista degli argomenti è troppo grande.
   \end{errlist}
-  ed inoltre \errval{EFAULT}, \errval{ENOMEM},
-  \errval{EIO}, \errval{ENAMETOOLONG}, \errval{ELOOP}, \errval{ENOTDIR},
-  \errval{EISDIR}, \errval{ENFILE}, \errval{EMFILE} nel loro significato
-  generico.
-}
+  ed inoltre \errval{EFAULT}, \errval{EIO}, \errval{EISDIR}, \errval{ELOOP},
+  \errval{EMFILE}, \errval{ENAMETOOLONG}, \errval{ENFILE}, \errval{ENOMEM},
+  \errval{ENOTDIR} nel loro significato generico.  }
 \end{funcproto}
 
 La funzione \func{execve} esegue il programma o lo script indicato dal
 \end{funcproto}
 
 La funzione \func{execve} esegue il programma o lo script indicato dal
@@ -1423,6 +1426,8 @@ il processo corrente è tracciato con \func{ptrace} (vedi
 sez.~\ref{sec:process_ptrace}) in caso di successo viene emesso il segnale
 \signal{SIGTRAP}.
 
 sez.~\ref{sec:process_ptrace}) in caso di successo viene emesso il segnale
 \signal{SIGTRAP}.
 
+% TODO aggiungere la parte sul numero massimo di argomenti, da man execve
+
 Le altre funzioni della famiglia (\funcd{execl}, \funcd{execv},
 \funcd{execle}, \funcd{execlp}, \funcd{execvp}) servono per fornire all'utente
 una serie di possibili diverse interfacce nelle modalità di passaggio degli
 Le altre funzioni della famiglia (\funcd{execl}, \funcd{execv},
 \funcd{execle}, \funcd{execlp}, \funcd{execvp}) servono per fornire all'utente
 una serie di possibili diverse interfacce nelle modalità di passaggio degli
@@ -1437,7 +1442,7 @@ argomenti all'esecuzione del nuovo programma. I loro prototipi sono:
 \fdecl{int execvp(const char *file, char *const argv[])}
 \fdesc{Eseguono un programma.} 
 }
 \fdecl{int execvp(const char *file, char *const argv[])}
 \fdesc{Eseguono un programma.} 
 }
-{Le funzioni ritorna solo in caso di errore, restituendo $-1$, i codici di
+{Le funzioni ritornano solo in caso di errore, restituendo $-1$, i codici di
   errore sono gli stessi di \func{execve}.
 }
 \end{funcproto}
   errore sono gli stessi di \func{execve}.
 }
 \end{funcproto}
@@ -1654,7 +1659,7 @@ Infine nel caso il programma che si vuole eseguire sia uno script e non un
 binario, questo deve essere un file di testo che deve iniziare con una linea
 nella forma:
 \begin{Example}
 binario, questo deve essere un file di testo che deve iniziare con una linea
 nella forma:
 \begin{Example}
-\#!/path/to/interpreter [argomenti]
+#!/path/to/interpreter [argomenti]
 \end{Example}
 dove l'interprete indicato deve essere un eseguibile binario e non un altro
 script, che verrà chiamato come se si fosse eseguito il comando
 \end{Example}
 dove l'interprete indicato deve essere un eseguibile binario e non un altro
 script, che verrà chiamato come se si fosse eseguito il comando
@@ -2219,9 +2224,9 @@ il suo prototipo è:
 caso \var{errno} assumerà uno dei valori:
 \begin{errlist}
 \item[\errcode{EFAULT}] \param{list} non ha un indirizzo valido.
 caso \var{errno} assumerà uno dei valori:
 \begin{errlist}
 \item[\errcode{EFAULT}] \param{list} non ha un indirizzo valido.
-\item[\errcode{EPERM}] il processo non ha i privilegi di amministratore.
 \item[\errcode{EINVAL}] il valore di \param{size} è maggiore del valore
     massimo consentito di gruppi supplementari.
 \item[\errcode{EINVAL}] il valore di \param{size} è maggiore del valore
     massimo consentito di gruppi supplementari.
+\item[\errcode{EPERM}] il processo non ha i privilegi di amministratore.
 \end{errlist}}
 \end{funcproto}
 
 \end{errlist}}
 \end{funcproto}
 
@@ -2243,9 +2248,9 @@ un utente specifico, si può usare \funcd{initgroups} il cui prototipo è:
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
 caso \var{errno} assumerà uno dei valori:
 \begin{errlist}
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
 caso \var{errno} assumerà uno dei valori:
 \begin{errlist}
-\item[\errcode{EPERM}] il processo non ha i privilegi di amministratore.
 \item[\errcode{ENOMEM}] non c'è memoria sufficiente per allocare lo spazio per
   informazioni dei gruppi.
 \item[\errcode{ENOMEM}] non c'è memoria sufficiente per allocare lo spazio per
   informazioni dei gruppi.
+\item[\errcode{EPERM}] il processo non ha i privilegi di amministratore.
 \end{errlist}}
 \end{funcproto}
 
 \end{errlist}}
 \end{funcproto}
 
@@ -2532,10 +2537,10 @@ funzione \funcd{getpriority}, derivata da BSD; il suo prototipo è:
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
 caso \var{errno} assumerà uno dei valori:
 \begin{errlist}
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
 caso \var{errno} assumerà uno dei valori:
 \begin{errlist}
-\item[\errcode{ESRCH}] non c'è nessun processo che corrisponda ai valori di
-  \param{which} e \param{who}.
 \item[\errcode{EINVAL}] il valore di \param{which} non è uno di quelli
     elencati in tab.~\ref{tab:proc_getpriority}.
 \item[\errcode{EINVAL}] il valore di \param{which} non è uno di quelli
     elencati in tab.~\ref{tab:proc_getpriority}.
+\item[\errcode{ESRCH}] non c'è nessun processo che corrisponda ai valori di
+  \param{which} e \param{who}.
 \end{errlist}}
 \end{funcproto}
 
 \end{errlist}}
 \end{funcproto}
 
@@ -2594,14 +2599,14 @@ impostare la priorità di uno o più processi; il suo prototipo è:
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
 caso \var{errno} assumerà uno dei valori:
 \begin{errlist}
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
 caso \var{errno} assumerà uno dei valori:
 \begin{errlist}
+\item[\errcode{EACCES}] si è richiesto un aumento di priorità senza avere
+  sufficienti privilegi.
+\item[\errcode{EINVAL}] il valore di \param{which} non è uno di quelli
+  elencati in tab.~\ref{tab:proc_getpriority}.
+\item[\errcode{EPERM}] un processo senza i privilegi di amministratore ha
+  cercato di modificare la priorità di un processo di un altro utente.
 \item[\errcode{ESRCH}] non c'è nessun processo che corrisponda ai valori di
   \param{which} e \param{who}.
 \item[\errcode{ESRCH}] non c'è nessun processo che corrisponda ai valori di
   \param{which} e \param{who}.
-\item[\errcode{EINVAL}] il valore di \param{which} non è uno di quelli
-    elencati in tab.~\ref{tab:proc_getpriority}.
-  \item[\errcode{EACCES}] si è richiesto un aumento di priorità senza avere
-    sufficienti privilegi.
-  \item[\errcode{EPERM}] un processo senza i privilegi di amministratore ha
-    cercato di modificare la priorità di un processo di un altro utente.
 \end{errlist}}
 \end{funcproto}
 
 \end{errlist}}
 \end{funcproto}
 
@@ -2734,11 +2739,11 @@ ordinarie o viceversa, che di specificare, in caso di politiche
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
 caso \var{errno} assumerà uno dei valori:
 \begin{errlist}
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
 caso \var{errno} assumerà uno dei valori:
 \begin{errlist}
-    \item[\errcode{ESRCH}] il processo \param{pid} non esiste.
     \item[\errcode{EINVAL}] il valore di \param{policy} non esiste o il
       relativo valore di \param{p} non è valido per la politica scelta.
     \item[\errcode{EPERM}] il processo non ha i privilegi per attivare la
       politica richiesta.
     \item[\errcode{EINVAL}] il valore di \param{policy} non esiste o il
       relativo valore di \param{p} non è valido per la politica scelta.
     \item[\errcode{EPERM}] il processo non ha i privilegi per attivare la
       politica richiesta.
+    \item[\errcode{ESRCH}] il processo \param{pid} non esiste.
  \end{errlist}}
 \end{funcproto}
 
  \end{errlist}}
 \end{funcproto}
 
@@ -2862,7 +2867,7 @@ stato \textit{runnable} viene sempre inserito in coda alla lista. Se la
 politica scelta è \const{SCHED\_FIFO} quando il processo viene eseguito viene
 automaticamente rimesso in coda alla lista, e la sua esecuzione continua
 fintanto che non viene bloccato da una richiesta di I/O, o non rilascia
 politica scelta è \const{SCHED\_FIFO} quando il processo viene eseguito viene
 automaticamente rimesso in coda alla lista, e la sua esecuzione continua
 fintanto che non viene bloccato da una richiesta di I/O, o non rilascia
-volontariamente la CPU (in tal caso, tornando nello stato \textbf{Runnable}
+volontariamente la CPU (in tal caso, tornando nello stato \textit{runnable}
 sarà reinserito in coda alla lista); l'esecuzione viene ripresa subito solo
 nel caso che esso sia stato interrotto da un processo a priorità più alta.
 
 sarà reinserito in coda alla lista); l'esecuzione viene ripresa subito solo
 nel caso che esso sia stato interrotto da un processo a priorità più alta.
 
@@ -2901,14 +2906,14 @@ prototipi sono:
 \fdecl{int sched\_getparam(pid\_t pid, struct sched\_param *param)}
 \fdesc{Legge la priorità statica di un processo.} 
 }
 \fdecl{int sched\_getparam(pid\_t pid, struct sched\_param *param)}
 \fdesc{Legge la priorità statica di un processo.} 
 }
-{La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
+{Le funzioni ritornano $0$ in caso di successo e $-1$ per un errore, nel qual
 caso \var{errno} assumerà uno dei valori:
 \begin{errlist}
 caso \var{errno} assumerà uno dei valori:
 \begin{errlist}
-\item[\errcode{ESRCH}] il processo \param{pid} non esiste.
 \item[\errcode{EINVAL}] il valore di \param{param} non ha senso per la
   politica usata dal processo.
 \item[\errcode{EPERM}] non si hanno privilegi sufficienti per eseguire
   l'operazione.
 \item[\errcode{EINVAL}] il valore di \param{param} non ha senso per la
   politica usata dal processo.
 \item[\errcode{EPERM}] non si hanno privilegi sufficienti per eseguire
   l'operazione.
+\item[\errcode{ESRCH}] il processo \param{pid} non esiste.
 \end{errlist}}
 \end{funcproto}
 
 \end{errlist}}
 \end{funcproto}
 
@@ -2940,9 +2945,9 @@ prototipo è:
 {La funzione ritorna la politica di \textit{scheduling}  in caso di successo e
   $-1$ per un errore, nel qual caso \var{errno} assumerà uno dei valori:
 \begin{errlist}
 {La funzione ritorna la politica di \textit{scheduling}  in caso di successo e
   $-1$ per un errore, nel qual caso \var{errno} assumerà uno dei valori:
 \begin{errlist}
-    \item[\errcode{ESRCH}] il processo \param{pid} non esiste.
     \item[\errcode{EPERM}] non si hanno privilegi sufficienti per eseguire
       l'operazione.
     \item[\errcode{EPERM}] non si hanno privilegi sufficienti per eseguire
       l'operazione.
+    \item[\errcode{ESRCH}] il processo \param{pid} non esiste.
 \end{errlist}}
 \end{funcproto}
 
 \end{errlist}}
 \end{funcproto}
 
@@ -2965,10 +2970,10 @@ il suo prototipo è:
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
 caso \var{errno} assumerà uno dei valori:
 \begin{errlist}
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
 caso \var{errno} assumerà uno dei valori:
 \begin{errlist}
-\item[\errcode{ESRCH}] il processo \param{pid} non esiste.
 \item[\errcode{EINVAL}] l'argomento \param{pid} non è valido. 
 \item[\errcode{ENOSYS}] la \textit{system call} non è presente (solo per
   kernel arcaici).
 \item[\errcode{EINVAL}] l'argomento \param{pid} non è valido. 
 \item[\errcode{ENOSYS}] la \textit{system call} non è presente (solo per
   kernel arcaici).
+\item[\errcode{ESRCH}] il processo \param{pid} non esiste.
 \end{errlist}
 ed inoltre anche \errval{EFAULT} nel suo significato generico.}
 \end{funcproto}
 \end{errlist}
 ed inoltre anche \errval{EFAULT} nel suo significato generico.}
 \end{funcproto}
@@ -3020,7 +3025,7 @@ l'introduzione del \textit{Completely Fair Scheduler} questo comportamento è
 cambiato ed un processo che chiama la funzione viene inserito nella lista dei
 processi inattivo, con un tempo molto maggiore.\footnote{è comunque possibile
   ripristinare un comportamento analogo al precedente scrivendo il valore 1
 cambiato ed un processo che chiama la funzione viene inserito nella lista dei
 processi inattivo, con un tempo molto maggiore.\footnote{è comunque possibile
   ripristinare un comportamento analogo al precedente scrivendo il valore 1
-  nel file \texttt{/proc/sys/kernel/sched\_compat\_yield}.}
+  nel file \sysctlfile{kernel/sched\_compat\_yield}.}
 
 L'uso delle funzione nella programmazione ordinaria può essere utile e
 migliorare le prestazioni generali del sistema quando si è appena rilasciata
 
 L'uso delle funzione nella programmazione ordinaria può essere utile e
 migliorare le prestazioni generali del sistema quando si è appena rilasciata
@@ -3100,11 +3105,11 @@ funzione di libreria è \funcd{sched\_setaffinity} ed il suo prototipo è:
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
 caso \var{errno} assumerà uno dei valori:
 \begin{errlist}
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
 caso \var{errno} assumerà uno dei valori:
 \begin{errlist}
-\item[\errcode{ESRCH}] il processo \param{pid} non esiste.
 \item[\errcode{EINVAL}] il valore di \param{mask} contiene riferimenti a
   processori non esistenti nel sistema o a cui non è consentito l'accesso.
 \item[\errcode{EPERM}] il processo non ha i privilegi sufficienti per
   eseguire l'operazione.
 \item[\errcode{EINVAL}] il valore di \param{mask} contiene riferimenti a
   processori non esistenti nel sistema o a cui non è consentito l'accesso.
 \item[\errcode{EPERM}] il processo non ha i privilegi sufficienti per
   eseguire l'operazione.
+\item[\errcode{ESRCH}] il processo \param{pid} non esiste.
 \end{errlist}
 ed inoltre anche \errval{EFAULT} nel suo significato generico.}
 \end{funcproto}
 \end{errlist}
 ed inoltre anche \errval{EFAULT} nel suo significato generico.}
 \end{funcproto}
@@ -3167,12 +3172,12 @@ permette di identificare un insieme di processori. Il dato è normalmente una
 maschera binaria: nei casi più comuni potrebbe bastare un intero a 32 bit, in
 cui ogni bit corrisponde ad un processore, ma oggi esistono architetture in
 cui questo numero può non essere sufficiente, e per questo è stato creato
 maschera binaria: nei casi più comuni potrebbe bastare un intero a 32 bit, in
 cui ogni bit corrisponde ad un processore, ma oggi esistono architetture in
 cui questo numero può non essere sufficiente, e per questo è stato creato
-questo \itindex{tipo!opaco} tipo opaco e una interfaccia di gestione che
+questo \index{tipo!opaco} tipo opaco e una interfaccia di gestione che
 permette di usare a basso livello un tipo di dato qualunque rendendosi
 indipendenti dal numero di bit e dalla loro disposizione.  Per questo le
 funzioni richiedono anche che oltre all'insieme di processori si indichi anche
 permette di usare a basso livello un tipo di dato qualunque rendendosi
 indipendenti dal numero di bit e dalla loro disposizione.  Per questo le
 funzioni richiedono anche che oltre all'insieme di processori si indichi anche
-la dimensione dello stesso con l'argomento \param{setsize}, per il quale,
-se non si usa l'allocazione dinamica che vedremo a breve, ed è in genere
+la dimensione dello stesso con l'argomento \param{setsize}, per il quale, se
+non si usa l'allocazione dinamica che vedremo a breve, ed è in genere
 sufficiente passare il valore \code{sizeof(cpu\_set\_t)}.
 
 L'interfaccia di gestione degli insiemi di processori, oltre alla definizione
 sufficiente passare il valore \code{sizeof(cpu\_set\_t)}.
 
 L'interfaccia di gestione degli insiemi di processori, oltre alla definizione
@@ -3321,9 +3326,9 @@ cui prototipo è:
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
 caso \var{errno} assumerà uno dei valori:
 \begin{errlist}
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
 caso \var{errno} assumerà uno dei valori:
 \begin{errlist}
-\item[\errcode{ESRCH}] il processo \param{pid} non esiste.
 \item[\errcode{EINVAL}] \param{setsize} è più piccolo delle dimensioni
   della maschera di affinità usata dal kernel.
 \item[\errcode{EINVAL}] \param{setsize} è più piccolo delle dimensioni
   della maschera di affinità usata dal kernel.
+\item[\errcode{ESRCH}] il processo \param{pid} non esiste.
 \end{errlist}
 ed inoltre anche \errval{EFAULT} nel suo significato generico.}
 \end{funcproto}
 \end{errlist}
 ed inoltre anche \errval{EFAULT} nel suo significato generico.}
 \end{funcproto}
@@ -3401,11 +3406,11 @@ prototipi sono:
   successo e $-1$ per un errore, nel qual caso \var{errno} assumerà uno dei
   valori:
 \begin{errlist}
   successo e $-1$ per un errore, nel qual caso \var{errno} assumerà uno dei
   valori:
 \begin{errlist}
-\item[\errcode{ESRCH}] non esiste un processo corrispondente alle indicazioni.
 \item[\errcode{EINVAL}] i valori di \param{which} o di \param{ioprio} non
   sono validi. 
 \item[\errcode{EPERM}] non si hanno i privilegi per eseguire
   l'impostazione (solo per \func{ioprio\_set}). 
 \item[\errcode{EINVAL}] i valori di \param{which} o di \param{ioprio} non
   sono validi. 
 \item[\errcode{EPERM}] non si hanno i privilegi per eseguire
   l'impostazione (solo per \func{ioprio\_set}). 
+\item[\errcode{ESRCH}] non esiste un processo corrispondente alle indicazioni.
 \end{errlist}}
 \end{funcproto}
 
 \end{errlist}}
 \end{funcproto}
 
@@ -3842,7 +3847,7 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
 
   Il comportamento di default prevede che per tutti i processi si applichi la
   politica generale di sistema definita nel file
 
   Il comportamento di default prevede che per tutti i processi si applichi la
   politica generale di sistema definita nel file
-  \procfile{/proc/sys/vm/memory\_failure\_early\_kill}, ma specificando
+  \sysctlfile{vm/memory\_failure\_early\_kill}, ma specificando
   per \param{arg2} il valore \const{PR\_MCE\_KILL\_SET} è possibile impostare
   con il contenuto di \param{arg3} una politica specifica del processo
   chiamante. Si può tornare alla politica di default del sistema utilizzando
   per \param{arg2} il valore \const{PR\_MCE\_KILL\_SET} è possibile impostare
   con il contenuto di \param{arg3} una politica specifica del processo
   chiamante. Si può tornare alla politica di default del sistema utilizzando
@@ -3908,9 +3913,10 @@ indicare la unità di esecuzione generica messa a disposizione del kernel che
 Oltre a questo la funzione consente, ad uso delle nuove funzionalità di
 virtualizzazione dei processi, di creare nuovi \textit{namespace} per una
 serie di proprietà generali dei processi (come l'elenco dei PID, l'albero dei
 Oltre a questo la funzione consente, ad uso delle nuove funzionalità di
 virtualizzazione dei processi, di creare nuovi \textit{namespace} per una
 serie di proprietà generali dei processi (come l'elenco dei PID, l'albero dei
-file, i \textit{mount point}, la rete, ecc.), che consentono di creare gruppi
-di processi che vivono in una sorta di spazio separato dagli altri, che
-costituisce poi quello che viene chiamato un \textit{container}.
+file, i \itindex{mount~point} \textit{mount point}, la rete, ecc.), che
+consentono di creare gruppi di processi che vivono in una sorta di spazio
+separato dagli altri, che costituisce poi quello che viene chiamato un
+\textit{container}.
 
 La \textit{system call} richiede soltanto due argomenti: il
 primo, \param{flags}, consente di controllare le modalità di creazione del
 
 La \textit{system call} richiede soltanto due argomenti: il
 primo, \param{flags}, consente di controllare le modalità di creazione del
@@ -3989,6 +3995,9 @@ visto in sez.~\ref{sec:proc_syscall}.\footnote{ed inoltre per questa
 \end{errlist}}
 \end{funcproto}
 
 \end{errlist}}
 \end{funcproto}
 
+% NOTE: una pagina con la descrizione degli argomenti:
+% * http://www.lindevdoc.org/wiki/Clone 
+
 La funzione prende come primo argomento \param{fn} il puntatore alla funzione
 che verrà messa in esecuzione nel nuovo processo, che può avere un unico
 argomento di tipo puntatore a \ctyp{void}, il cui valore viene passato dal
 La funzione prende come primo argomento \param{fn} il puntatore alla funzione
 che verrà messa in esecuzione nel nuovo processo, che può avere un unico
 argomento di tipo puntatore a \ctyp{void}, il cui valore viene passato dal
@@ -4003,18 +4012,23 @@ non ritorna, o esegue \func{exit} o viene terminata da un segnale. Il valore
 di ritorno della funzione (o quello specificato con \func{exit}) verrà
 utilizzato come stato di uscita della funzione. I tre
 argomenti \param{ptid}, \param{tls} e \param{ctid} sono opzionali e sono
 di ritorno della funzione (o quello specificato con \func{exit}) verrà
 utilizzato come stato di uscita della funzione. I tre
 argomenti \param{ptid}, \param{tls} e \param{ctid} sono opzionali e sono
-presenti solo a partire dal kernel 2.6 ed usati principalmente per le funzioni
-di gestione dei \textit{thread} presenti nella \acr{glibc}.
+presenti solo a partire dal kernel 2.6 e sono stati aggiunti come supporto per
+le funzioni di gestione dei \textit{thread} (la \textit{Native Thread Posix
+  Library}, vedi sez.~\ref{sec:linux_ntpl}) nella \acr{glibc}, essi vengono
+utilizzati soltanto se si sono specificati rispettivamente i flag
+\const{CLONE\_PARENT\_SETTID}, \const{CLONE\_SETTLS} e
+\const{CLONE\_CHILD\_CLEARTID}.
 
 Il comportamento di \func{clone}, che si riflette sulle caratteristiche del
 nuovo processo da essa creato, è controllato dall'argomento \param{flags}, che
 deve essere specificato come maschera binaria, ottenuta con un OR aritmetico
 di una delle costanti del seguente elenco, che illustra quelle attualmente
 
 Il comportamento di \func{clone}, che si riflette sulle caratteristiche del
 nuovo processo da essa creato, è controllato dall'argomento \param{flags}, che
 deve essere specificato come maschera binaria, ottenuta con un OR aritmetico
 di una delle costanti del seguente elenco, che illustra quelle attualmente
-disponibili:\footnote{alla stesura di questa sezione, cioè con il kernel 3.2.}
+disponibili:\footnote{si fa riferimento al momento della stesura di questa
+  sezione, cioè con il kernel 3.2.}
 
 \begin{basedescript}{\desclabelstyle{\pushlabel}}
 
 
 \begin{basedescript}{\desclabelstyle{\pushlabel}}
 
-\item[\const{CLONE\_CHILD\_CLEARTID}]
+\item[\const{CLONE\_CHILD\_CLEARTID}] cancella il 
 \item[\const{CLONE\_CHILD\_SETTID}]
 \item[\const{CLONE\_FILES}]
 \item[\const{CLONE\_FS}]
 \item[\const{CLONE\_CHILD\_SETTID}]
 \item[\const{CLONE\_FILES}]
 \item[\const{CLONE\_FS}]
@@ -4279,8 +4293,8 @@ aggiungendo il suffisso \code{\_r} al nome della versione normale.
 % LocalWords:  ETXTBSY EINVAL ELIBBAD BIG EFAULT EIO ENAMETOOLONG ELOOP ENOTDIR
 % LocalWords:  ENFILE EMFILE argc execl path execv execle execlp execvp vector
 % LocalWords:  list environ NULL umask pending utime cutime ustime fcntl linker
 % LocalWords:  ETXTBSY EINVAL ELIBBAD BIG EFAULT EIO ENAMETOOLONG ELOOP ENOTDIR
 % LocalWords:  ENFILE EMFILE argc execl path execv execle execlp execvp vector
 % LocalWords:  list environ NULL umask pending utime cutime ustime fcntl linker
-% LocalWords:  opendir libc interpreter FreeBSD capabilities Mandatory Access
-% LocalWords:  Control MAC SELinux Security Modules LSM superuser uid gid saved
+% LocalWords:  opendir libc interpreter FreeBSD capabilities mandatory access
+% LocalWords:  control MAC SELinux security modules LSM superuser uid gid saved
 % LocalWords:  effective euid egid dell' fsuid fsgid getuid geteuid getgid SVr
 % LocalWords:  getegid IDS NFS setuid setgid all' logout utmp screen xterm TODO
 % LocalWords:  setreuid setregid FIXME ruid rgid seteuid setegid setresuid size
 % LocalWords:  effective euid egid dell' fsuid fsgid getuid geteuid getgid SVr
 % LocalWords:  getegid IDS NFS setuid setgid all' logout utmp screen xterm TODO
 % LocalWords:  setreuid setregid FIXME ruid rgid seteuid setegid setresuid size
@@ -4323,9 +4337,9 @@ aggiungendo il suffisso \code{\_r} al nome della versione normale.
 % LocalWords:  namespace vsyscall SETTID FILES NEWIPC NEWNET NEWNS NEWPID ptid
 % LocalWords:  NEWUTS SETTLS SIGHAND SYSVSEM UNTRACED tls ctid CLEARTID panic
 % LocalWords:  loader EISDIR SIGTRAP uninterrutible killable EQUAL sizeof XOR
 % LocalWords:  namespace vsyscall SETTID FILES NEWIPC NEWNET NEWNS NEWPID ptid
 % LocalWords:  NEWUTS SETTLS SIGHAND SYSVSEM UNTRACED tls ctid CLEARTID panic
 % LocalWords:  loader EISDIR SIGTRAP uninterrutible killable EQUAL sizeof XOR
+% LocalWords:  destset srcset ALLOC num cpus setsize emacs
  
 %%% Local Variables: 
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
  
 %%% Local Variables: 
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
-% LocalWords:  destset srcset ALLOC num cpus setsize emacs