X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=prochand.tex;h=7d4f4744f61269f65013c2fb70805705e9db8468;hb=f10ada1c0b49d3bbdb22dbe3a61e27914584d70b;hp=d2b4391dcdbb637decd39a3e7eeb40a153d5f560;hpb=ed54132fb0762894a86b100023f9d04fc4028975;p=gapil.git diff --git a/prochand.tex b/prochand.tex index d2b4391..7d4f474 100644 --- a/prochand.tex +++ b/prochand.tex @@ -25,7 +25,7 @@ finale introdurremo alcune problematiche generiche della programmazione in 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 @@ -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 -\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 @@ -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 - \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. @@ -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 -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 @@ -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} - \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{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}} @@ -1137,38 +1137,43 @@ anomala), uno per indicare se è stato generato un \itindex{core~dump} \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 @@ -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} - \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{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}} @@ -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. - \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{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{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} - 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 @@ -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}. +% 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 @@ -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.} } -{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} @@ -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} -\#!/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 @@ -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. -\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{EPERM}] il processo non ha i privilegi di amministratore. \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} -\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{EPERM}] il processo non ha i privilegi di amministratore. \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} -\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{ESRCH}] non c'è nessun processo che corrisponda ai valori di + \param{which} e \param{who}. \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} +\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{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} @@ -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} - \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{ESRCH}] il processo \param{pid} non esiste. \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 -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. @@ -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.} } -{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} -\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{ESRCH}] il processo \param{pid} non esiste. \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} - \item[\errcode{ESRCH}] il processo \param{pid} non esiste. \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} @@ -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} -\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{ESRCH}] il processo \param{pid} non esiste. \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 - 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 @@ -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} -\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{ESRCH}] il processo \param{pid} non esiste. \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 -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 -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 @@ -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} -\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{ESRCH}] il processo \param{pid} non esiste. \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} -\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{ESRCH}] non esiste un processo corrispondente alle indicazioni. \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 - \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 @@ -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 -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 @@ -3989,6 +3995,9 @@ visto in sez.~\ref{sec:proc_syscall}.\footnote{ed inoltre per questa \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 @@ -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 -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 -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}} -\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}] @@ -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: 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 @@ -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: destset srcset ALLOC num cpus setsize emacs %%% Local Variables: %%% mode: latex %%% TeX-master: "gapil" %%% End: -% LocalWords: destset srcset ALLOC num cpus setsize emacs