%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
funzionalità della shell infatti c'è anche quella di consentire di concatenare
più programmi in una sola riga di comando con le pipe, ed in tal caso verranno
eseguiti più programmi, inoltre, anche quando si invoca un singolo programma,
funzionalità della shell infatti c'è anche quella di consentire di concatenare
più programmi in una sola riga di comando con le pipe, ed in tal caso verranno
eseguiti più programmi, inoltre, anche quando si invoca un singolo programma,
Per questo l'esecuzione di un comando può originare più di un processo; quindi
nella gestione del job control non si può far riferimento ai singoli processi.
Per questo l'esecuzione di un comando può originare più di un processo; quindi
nella gestione del job control non si può far riferimento ai singoli processi.
- \item[\errcode{ESRCH}] Il processo selezionato non esiste.
- \item[\errcode{EPERM}] In alcune implementazioni viene restituito quando il
+ \item[\errcode{ESRCH}] il processo selezionato non esiste.
+ \item[\errcode{EPERM}] in alcune implementazioni viene restituito quando il
\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}
\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[\errcode{ESRCH}] Il processo selezionato non esiste.
- \item[\errcode{EPERM}] Il cambiamento non è consentito.
- \item[\errcode{EACCES}] Il processo ha già eseguito una \func{exec}.
- \item[\errcode{EINVAL}] Il valore di \param{pgid} è negativo.
+ \item[\errcode{ESRCH}] il processo selezionato non esiste.
+ \item[\errcode{EPERM}] il cambiamento non è consentito.
+ \item[\errcode{EACCES}] il processo ha già eseguito una \func{exec}.
+ \item[\errcode{EINVAL}] il valore di \param{pgid} è negativo.
A tale scopo lo standard POSIX.1 prevede che ad ogni sessione possa essere
associato un terminale di controllo; in Linux questo viene realizzato
mantenendo fra gli attributi di ciascun processo anche qual'è il suo terminale
A tale scopo lo standard POSIX.1 prevede che ad ogni sessione possa essere
associato un terminale di controllo; in Linux questo viene realizzato
mantenendo fra gli attributi di ciascun processo anche qual'è il suo terminale
l'implementazione; in Linux anch'esso viene mantenuto nella solita struttura
\struct{task\_struct}, nel campo \var{tty}.} In generale ogni processo
eredita dal padre, insieme al \acr{pgid} e al \acr{sid} anche il terminale di
l'implementazione; in Linux anch'esso viene mantenuto nella solita struttura
\struct{task\_struct}, nel campo \var{tty}.} In generale ogni processo
eredita dal padre, insieme al \acr{pgid} e al \acr{sid} anche il terminale di
\bodydesc{La funzione restituisce 0 in caso di successo, e -1 in caso di
errore, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
\bodydesc{La funzione restituisce 0 in caso di successo, e -1 in caso di
errore, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{ENOSYS}] Il sistema non supporta il job control.
- \item[\errcode{EPERM}] Il \textit{process group} specificato non è nella
+ \item[\errcode{ENOSYS}] il sistema non supporta il job control.
+ \item[\errcode{EPERM}] il \textit{process group} specificato non è nella
gruppo di \textit{foreground}, e -1 in caso di errore, nel qual caso
\var{errno} assumerà i valori:
\begin{errlist}
gruppo di \textit{foreground}, e -1 in caso di errore, nel qual caso
\var{errno} assumerà i valori:
\begin{errlist}
corrisponde al terminale di controllo del processo chiamante.
\end{errlist}
ed inoltre \errval{EBADF} ed \errval{ENOSYS}.
corrisponde al terminale di controllo del processo chiamante.
\end{errlist}
ed inoltre \errval{EBADF} ed \errval{ENOSYS}.
Questi programmi, che devono essere eseguiti in modalità non interattiva e
senza nessun intervento dell'utente, sono normalmente chiamati
\textsl{demoni}, (o \textit{daemons}), nome ispirato dagli omonimi spiritelli
Questi programmi, che devono essere eseguiti in modalità non interattiva e
senza nessun intervento dell'utente, sono normalmente chiamati
\textsl{demoni}, (o \textit{daemons}), nome ispirato dagli omonimi spiritelli
-che svolgevano compiti vari, di cui parlava Socrate (che sosteneva di averne
-uno al suo servizio).\footnote{NdT. ricontrollare, i miei ricordi di filosofia
- sono piuttosto datati.}
+della mitologia greca che svolgevano compiti che gli dei trovavano noiosi, di
+cui parla anche Socrate (che sosteneva di averne uno al suo servizio).
+
+%TODO ricontrollare, i miei ricordi di filosofia sono piuttosto datati.
Se però si lancia un programma demone dalla riga di comando in un sistema che
supporta, come Linux, il \textit{job control} esso verrà comunque associato ad
Se però si lancia un programma demone dalla riga di comando in un sistema che
supporta, come Linux, il \textit{job control} esso verrà comunque associato ad
il programma), per evitare che la directory da cui si è lanciato il processo
resti in uso e non sia possibile rimuoverla o smontare il filesystem che la
contiene.
il programma), per evitare che la directory da cui si è lanciato il processo
resti in uso e non sia possibile rimuoverla o smontare il filesystem che la
contiene.
-\item Impostare la maschera dei permessi (di solito con \code{umask(0)}) in
- modo da non essere dipendenti dal valore ereditato da chi ha lanciato
- originariamente il processo.
+\item Impostare la \itindex{umask} maschera dei permessi (di solito con
+ \code{umask(0)}) in modo da non essere dipendenti dal valore ereditato da
+ chi ha lanciato originariamente il processo.
\item Chiudere tutti i file aperti che non servono più (in generale tutti); in
particolare vanno chiusi i file standard che di norma sono ancora associati
al terminale (un'altra opzione è quella di redirigerli verso
\item Chiudere tutti i file aperti che non servono più (in generale tutti); in
particolare vanno chiusi i file standard che di norma sono ancora associati
al terminale (un'altra opzione è quella di redirigerli verso
che indica la dimensione che deve avere una stringa per poter contenere il
nome di un terminale.} caratteri.
che indica la dimensione che deve avere una stringa per poter contenere il
nome di un terminale.} caratteri.
-Esiste infine una versione rientrante \funcd{ttyname\_r} della funzione
-\func{ttyname}, che non presenta il problema dell'uso di una zona di memoria
-statica; il suo prototipo è:
+Esiste infine una versione \index{funzioni!rientranti} rientrante
+\funcd{ttyname\_r} della funzione \func{ttyname}, che non presenta il problema
+dell'uso di una zona di memoria statica; il suo prototipo è:
\begin{prototype}{unistd.h}{int ttyname\_r(int desc, char *buff, size\_t len)}
Restituisce il nome del terminale associato al file \param{desc}.
\begin{prototype}{unistd.h}{int ttyname\_r(int desc, char *buff, size\_t len)}
Restituisce il nome del terminale associato al file \param{desc}.
\bodydesc{Entrambe le funzioni restituiscono 0 in caso di successo e -1 in
caso di errore, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
\bodydesc{Entrambe le funzioni restituiscono 0 in caso di successo e -1 in
caso di errore, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
di code di ingresso ed uscita; in generale si fa riferimento ad esse con il
nome di \textsl{discipline di linea}.
di code di ingresso ed uscita; in generale si fa riferimento ad esse con il
nome di \textsl{discipline di linea}.
Lo standard POSIX prevede alcune funzioni che permettono di intervenire
direttamente sulla gestione di quest'ultime e sull'interazione fra i dati in
ingresso ed uscita e le relative code. In generale tutte queste funzioni
Lo standard POSIX prevede alcune funzioni che permettono di intervenire
direttamente sulla gestione di quest'ultime e sull'interazione fra i dati in
ingresso ed uscita e le relative code. In generale tutte queste funzioni
sul terminale associato a \param{fd}; un valore nullo di \param{duration}
implica una durata del flusso fra 0.25 e 0.5 secondi, un valore diverso da
zero implica una durata pari a \code{duration*T} dove \code{T} è un valore
sul terminale associato a \param{fd}; un valore nullo di \param{duration}
implica una durata del flusso fra 0.25 e 0.5 secondi, un valore diverso da
zero implica una durata pari a \code{duration*T} dove \code{T} è un valore
-compreso fra 0.25 e 0.5.\footnote{POSIX specifica il comportamento solo nel
- caso si sia impostato un valore nullo per \param{duration}; il comportamento
- negli altri casi può dipendere dalla implementazione.}
+compreso fra 0.25 e 0.5.\footnote{lo standard POSIX specifica il comportamento
+ solo nel caso si sia impostato un valore nullo per \param{duration}; il
+ comportamento negli altri casi può dipendere dalla implementazione.}
Le altre funzioni previste da POSIX servono a controllare il comportamento
dell'interazione fra le code associate al terminale e l'utente; la prima è
Le altre funzioni previste da POSIX servono a controllare il comportamento
dell'interazione fra le code associate al terminale e l'utente; la prima è