provocato. A questo comportamento generico fanno eccezione \const{RLIMIT\_CPU}
in cui si ha in comportamento diverso per il superamento dei due limiti e
\const{RLIMIT\_CORE} che influenza soltanto la dimensione o l'eventuale
-creazione dei file di \itindex{core~dump} \textit{core dump} (vedi
-sez.~\ref{sec:sig_standard}).
+creazione dei file di \textit{core dump} (vedi sez.~\ref{sec:sig_standard}).
Per permettere di leggere e di impostare i limiti di utilizzo delle risorse da
parte di un processo sono previste due funzioni di sistema, \funcd{getrlimit}
specifici, si può anche usare la costante \const{RLIM\_INFINITY} che permette
di sbloccare completamente l'uso di una risorsa. Si ricordi però che solo un
processo con i privilegi di amministratore\footnote{per essere precisi in
- questo caso quello che serve è la \itindex{capabilities} \textit{capability}
+ questo caso quello che serve è la \textit{capability}
\const{CAP\_SYS\_RESOURCE} (vedi sez.~\ref{sec:proc_capabilities}).} può
innalzare un limite al di sopra del valore corrente del limite massimo ed
usare un valore qualsiasi per entrambi i limiti.
resta 2Gb, altrimenti la risorsa si dà per non limitata.
\item[\const{RLIMIT\_CORE}] Questa risorsa indica, in byte, la massima
- dimensione per un file di \itindex{core~dump} \textit{core dump} (vedi
+ dimensione per un file di \textit{core dump} (vedi
sez.~\ref{sec:sig_standard}) creato nella terminazione di un processo. File
di dimensioni maggiori verranno troncati a questo valore, mentre con un
- valore nullo si bloccherà la creazione dei \itindex{core~dump} \textit{core
- dump}.
+ valore nullo si bloccherà la creazione dei \textit{core dump}.
\item[\const{RLIMIT\_CPU}] Questa risorsa indica, in secondi, il massimo tempo
di CPU (vedi sez.~\ref{sec:sys_cpu_times}) che il processo può usare. Il
indica il \ids{PID} del processo di cui si vogliono cambiare i limiti e si può
usare un valore nullo per indicare il processo chiamante. Per modificare i
limiti di un altro processo, a meno di non avere privilegi
-amministrativi,\footnote{anche in questo caso la \itindex{capabilities}
- \textit{capability} necessaria è \const{CAP\_SYS\_RESOURCE} (vedi
+amministrativi,\footnote{anche in questo caso la \textit{capability}
+ necessaria è \const{CAP\_SYS\_RESOURCE} (vedi
sez.~\ref{sec:proc_capabilities}).} l'\ids{UID} ed il \ids{GID} reale del
chiamante devono coincidere con \ids{UID} e \ids{GID} del processo indicato
per i tre gruppi reale, effettivo e salvato.
La funzione attiva il salvataggio dei dati sul file indicato dal
\textit{pathname} contenuti nella stringa puntata da \param{filename}; la
funzione richiede che il processo abbia i privilegi di amministratore (è
-necessaria la \itindex{capabilities} capability \const{CAP\_SYS\_PACCT}, vedi
+necessaria la \textit{capability} \const{CAP\_SYS\_PACCT}, vedi
sez.~\ref{sec:proc_capabilities}). Se si specifica il valore \val{NULL} per
\param{filename} il \textit{BSD accounting} viene invece disabilitato. Un
semplice esempio per l'uso di questa funzione è riportato nel programma
Quando si attiva la contabilità, il file che si indica deve esistere; esso
verrà aperto in sola scrittura e le informazioni verranno registrate in
-\itindex{append~mode} \textit{append} in coda al file tutte le volte che un
-processo termina. Le informazioni vengono salvate in formato binario, e
-corrispondono al contenuto della apposita struttura dati definita all'interno
-del kernel.
+\textit{append} in coda al file tutte le volte che un processo termina. Le
+informazioni vengono salvate in formato binario, e corrispondono al contenuto
+della apposita struttura dati definita all'interno del kernel.
Il funzionamento di \func{acct} viene inoltre modificato da uno specifico
parametro di sistema, modificabile attraverso \sysctlfile{kernel/acct} (o
\subsection{La misura del tempo in Unix}
\label{sec:sys_unix_time}
+\itindbeg{calendar~time}
+
Tradizionalmente nei sistemi unix-like sono sempre stati previsti due tipi
distinti di tempi, caratterizzati da altrettante modalità di misura ed
espressi con diversi tipi di dati, chiamati rispettivamente \textit{calendar
time} e \textit{process time}, secondo le seguenti definizioni:
\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
-\item[\textit{calendar time}] \itindex{calendar~time} detto anche
- \textsl{tempo di calendario}, \textsl{tempo d'orologio} o \textit{tempo
- reale}. Si tratta di un tempo assoluto o di un intervallo di tempo come lo
- intende normalmente per le misure fatte con un orologio. Per esprimere
+\item[\textit{calendar time}] detto anche \textsl{tempo di calendario},
+ \textsl{tempo d'orologio} o \textit{tempo reale}. Si tratta di un
+ tempo assoluto o di un intervallo di tempo come lo intende
+ normalmente per le misure fatte con un orologio. Per esprimere
questo tempo è stato riservato il tipo \type{time\_t}, e viene
- tradizionalmente misurato in secondi a partire dalla mezzanotte del primo
- gennaio 1970, data che viene chiamata \textit{the Epoch}.
+ tradizionalmente misurato in secondi a partire dalla mezzanotte del
+ primo gennaio 1970, data che viene chiamata \textit{the Epoch}.
\item[\textit{process time}] \itindex{process~time} detto anche \textsl{tempo
di processore} o \textsl{tempo di CPU}. Si tratta del tempo impiegato da
precedente indica soltanto un intervallo di durata.
\end{basedescript}
-Il \itindex{calendar~time} \textit{calendar time} viene sempre mantenuto
-facendo riferimento al cosiddetto \textit{tempo universale coordinato} UTC,
-anche se talvolta viene usato il cosiddetto GMT (\textit{Greenwich Mean Time})
-dato che l'UTC corrisponde all'ora locale di Greenwich. Si tratta del tempo su
-cui viene mantenuto il cosiddetto \textsl{orologio di sistema}, e viene usato
-per indicare i tempi dei file (quelli di sez.~\ref{sec:file_file_times}) o le
-date di avvio dei processi, ed è il tempo che viene usato dai demoni che
-compiono lavori amministrativi ad orari definito, come \cmd{cron}.
+Il \textit{calendar time} viene sempre mantenuto facendo riferimento
+al cosiddetto \textit{tempo universale coordinato} UTC, anche se
+talvolta viene usato il cosiddetto GMT (\textit{Greenwich Mean Time})
+dato che l'UTC corrisponde all'ora locale di Greenwich. Si tratta del
+tempo su cui viene mantenuto il cosiddetto \textsl{orologio di
+ sistema}, e viene usato per indicare i tempi dei file (quelli di
+sez.~\ref{sec:file_file_times}) o le date di avvio dei processi, ed è
+il tempo che viene usato dai demoni che compiono lavori amministrativi
+ad orari definito, come \cmd{cron}.
Si tenga presente che questo tempo è mantenuto dal kernel e non è detto che
corrisponda al tempo misurato dall'orologio hardware presente su praticamente
di sistema misuri sempre un tempo monotono crescente come nella realtà, anche
in presenza di cambi di fusi orari.
+\itindend{calendar~time}
+
Il \itindex{process~time} \textit{process time} invece indica sempre una
misura di un lasso di tempo e viene usato per tenere conto dei tempi di
esecuzione dei processi. Esso viene sempre diviso in \textit{user time} e
\begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
\item[\textit{clock time}] il tempo \textsl{reale}, viene chiamato anche
\textit{wall clock time} o \textit{elapsed time}, passato dall'avvio del
- processo. Questo tempo fa riferimento al \itindex{calendar~time}
+ processo. Questo tempo fa riferimento al
\textit{calendar time} e dice la durata effettiva dell'esecuzione del
processo, ma chiaramente dipende dal carico del sistema e da quanti altri
processi stanno girando nello stesso momento.
\itindbeg{process~time}
Di norma tutte le operazioni del sistema fanno sempre riferimento al
-\itindex{calendar~time} \textit{calendar time}, l'uso del \textit{process
- time} è riservato a quei casi in cui serve conoscere i tempi di esecuzione
-di un processo (ad esempio per valutarne l'efficienza). In tal caso infatti
-fare ricorso al \textit{calendar time} è inutile in quanto il tempo può essere
-trascorso mentre un altro processo era in esecuzione o in attesa del risultato
-di una operazione di I/O.
+\textit{calendar time}, l'uso del \textit{process time} è riservato a
+quei casi in cui serve conoscere i tempi di esecuzione di un processo
+(ad esempio per valutarne l'efficienza). In tal caso infatti fare
+ricorso al \textit{calendar time} è inutile in quanto il tempo può
+essere trascorso mentre un altro processo era in esecuzione o in
+attesa del risultato di una operazione di I/O.
La funzione più semplice per leggere il \textit{process time} di un processo è
\funcd{clock}, che da una valutazione approssimativa del tempo di CPU
Dato che modificare l'ora ha un impatto su tutto il sistema il cambiamento
dell'orologio è una operazione privilegiata e questa funzione può essere usata
-solo da un processo con i privilegi di amministratore (per la precisione la la
-\itindex{capabilities} capability \const{CAP\_SYS\_TIME}), altrimenti la
-chiamata fallirà con un errore di \errcode{EPERM}.
+solo da un processo con i privilegi di amministratore (per la precisione la
+\textit{capability} \const{CAP\_SYS\_TIME}), altrimenti la chiamata fallirà
+con un errore di \errcode{EPERM}.
Data la scarsa precisione nell'uso di \type{time\_t}, che ha una risoluzione
massima di un secondo, quando si devono effettuare operazioni sui tempi di
Come nel caso di \func{stime} anche \func{settimeofday} può essere utilizzata
solo da un processo coi privilegi di amministratore e più precisamente con la
-\itindex{capability} capacità \const{CAP\_SYS\_TIME}. Si tratta comunque di
-una condizione generale che continua a valere per qualunque funzione che vada
-a modificare l'orologio di sistema, comprese tutte quelle che tratteremo in
-seguito.
+capacità \const{CAP\_SYS\_TIME}. Si tratta comunque di una condizione generale
+che continua a valere per qualunque funzione che vada a modificare l'orologio
+di sistema, comprese tutte quelle che tratteremo in seguito.
Il secondo argomento di entrambe le funzioni è una struttura
\struct{timezone}, che storicamente veniva utilizzata per specificare appunto