In Linux buona parte di queste azioni, possono venire eseguite invocando la
funzione \func{daemon}, introdotta per la prima volta in BSD4.4; il suo
prototipo è:
-\begin{prototype}{unistd.h}{pid\_t getsid(pid\_t pid)}
- Legge l'identificatore di sessione del processo \param{pid}.
-
- \bodydesc{La funzione restituisce l'identificatore (un numero positivo) in
- caso di successo, 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}] In alcune implementazioni viene restituito quando il
- processo selezionato non fa parte della stessa sessione del processo
- corrente.
- \end{errlist}
- }
-\end{prototype}
-
-Entrambi gli identificatori vengono inizializzati alla creazione di ciascun
-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. Vedremo poi come sia possibile creare più
-\textit{process group} all'interno della stessa sessione, e spostare i
-processi dall'uno all'altro, ma sempre all'interno di una stessa sessione.
-
-Ciascun raggruppamento di processi ha sempre un processo principale, il
-cosiddetto \textit{process group leader}, che è identificato dall'avere un
-\acr{pgid} uguale al suo \acr{pid}, in genere questo è il primo processo del
-raggruppamento, che si incarica di lanciare tutti gli altri. Un nuovo
-raggruppamento 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{group leader} di un nuovo raggruppamento, tutti
-i successivi processi da esso creati apparterranno (a meno di non cambiare di
-nuovo il \acr{pgid}) al nuovo raggruppamento. È possibile invece spostare un
-processo da un raggruppamento ad un altro con la funzione \func{setpgid}, il
-cui prototipo è:
\begin{prototype}{unistd.h}{int daemon(int nochdir, int noclose)}
Esegue le operazioni che distaccano il processo dal terminale di controllo e
lo fanno girare come demone.