%% 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",
di cui si vuole sapere il \acr{pgid}; un valore nullo per \param{pid}
restituisce il \acr{pgid} del processo corrente; \func{getpgrp} è di norma
equivalente a \code{getpgid(0)}.
di cui si vuole sapere il \acr{pgid}; un valore nullo per \param{pid}
restituisce il \acr{pgid} del processo corrente; \func{getpgrp} è di norma
equivalente a \code{getpgid(0)}.
Ciascun raggruppamento di processi ha sempre un processo principale, il
cosiddetto \itindex{process~group~leader} \textit{process group leader}, che è
Ciascun raggruppamento di processi ha sempre un processo principale, il
cosiddetto \itindex{process~group~leader} \textit{process group leader}, che è
questo è il primo processo del raggruppamento, che si incarica di lanciare
tutti gli altri. Un nuovo raggruppamento si crea con la funzione
\funcd{setpgrp},\footnote{questa è la definizione di POSIX.1, BSD definisce
questo è il primo processo del raggruppamento, che si incarica di lanciare
tutti gli altri. Un nuovo raggruppamento si crea con la funzione
\funcd{setpgrp},\footnote{questa è la definizione di POSIX.1, BSD definisce
richiedere esplicitamente la compatibilità all'indietro con BSD, definendo
la macro \macro{\_BSD\_SOURCE}.} il cui prototipo è:
\begin{prototype}{unistd.h}{int setpgrp(void)}
richiedere esplicitamente la compatibilità all'indietro con BSD, definendo
la macro \macro{\_BSD\_SOURCE}.} il cui prototipo è:
\begin{prototype}{unistd.h}{int setpgrp(void)}
corrente, rende questo \itindex{process~group~leader} \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
corrente, rende questo \itindex{process~group~leader} \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
dal kernel che mantiene allo scopo un altro campo, \var{did\_exec}, in
\struct{task\_struct}.} Specificando un valore nullo per \param{pid} si
indica il processo corrente, mentre specificando un valore nullo per
dal kernel che mantiene allo scopo un altro campo, \var{did\_exec}, in
\struct{task\_struct}.} Specificando un valore nullo per \param{pid} si
indica il processo corrente, mentre specificando un valore nullo per
\bodydesc{La funzione ritorna il valore del nuovo \acr{sid}, e -1 in caso di
errore, il solo errore possibile è \errval{EPERM}, che si ha quando il
\bodydesc{La funzione ritorna il valore del nuovo \acr{sid}, e -1 in caso di
errore, il solo errore possibile è \errval{EPERM}, che si ha quando il
\textit{process group} di cui esso diventa leader (come per i \textit{process
group} un processo si dice leader di sessione\footnote{in Linux la proprietà
è mantenuta in maniera indipendente con un apposito campo \var{leader} in
\textit{process group} di cui esso diventa leader (come per i \textit{process
group} un processo si dice leader di sessione\footnote{in Linux la proprietà
è mantenuta in maniera indipendente con un apposito campo \var{leader} in
unico componente. Inoltre la funzione distacca il processo da ogni terminale
di controllo (torneremo sull'argomento in sez.~\ref{sec:sess_ctrl_term}) cui
fosse in precedenza associato.
unico componente. Inoltre la funzione distacca il processo da ogni terminale
di controllo (torneremo sull'argomento in sez.~\ref{sec:sess_ctrl_term}) cui
fosse in precedenza associato.
\itindex{process~group~leader} leader di un \textit{process group}, per cui
per usarla di norma si esegue una \func{fork} e si esce, per poi chiamare
\func{setsid} nel processo figlio, in modo che, avendo questo lo stesso
\itindex{process~group~leader} leader di un \textit{process group}, per cui
per usarla di norma si esegue una \func{fork} e si esce, per poi chiamare
\func{setsid} nel processo figlio, in modo che, avendo questo lo stesso
sez.~\ref{sec:proc_pid}), il figlio venga ad assumere un valore
corrispondente ad un \textit{process group} esistente; questo viene evitato
sez.~\ref{sec:proc_pid}), il figlio venga ad assumere un valore
corrispondente ad un \textit{process group} esistente; questo viene evitato
- dal kernel che considera come disponibili per un nuovo \acr{pid} solo valori
- che non corrispondono ad altri \acr{pid}, \acr{pgid} o \acr{sid} in uso nel
+ dal kernel che considera come disponibili per un nuovo \ids{PID} solo valori
+ che non corrispondono ad altri \ids{PID}, \acr{pgid} o \acr{sid} in uso nel
sistema.} Questa funzione viene usata di solito nel processo di login (per i
dettagli vedi sez.~\ref{sec:sess_login}) per raggruppare in una sessione tutti
i comandi eseguiti da un utente dalla sua shell.
sistema.} Questa funzione viene usata di solito nel processo di login (per i
dettagli vedi sez.~\ref{sec:sess_login}) per raggruppare in una sessione tutti
i comandi eseguiti da un utente dalla sua shell.
\texttt{HOME}, \texttt{SHELL}, ecc. Infine attraverso l'uso di \func{setuid},
\func{setgid} e \func{initgroups} verrà cambiata l'identità del proprietario
del processo, infatti, come spiegato in sez.~\ref{sec:proc_setuid}, avendo
\texttt{HOME}, \texttt{SHELL}, ecc. Infine attraverso l'uso di \func{setuid},
\func{setgid} e \func{initgroups} verrà cambiata l'identità del proprietario
del processo, infatti, come spiegato in sez.~\ref{sec:proc_setuid}, avendo
-invocato tali funzioni con i privilegi di amministratore, tutti gli \acr{uid}
-ed i \acr{gid} (reali, effettivi e salvati) saranno impostati a quelli
+invocato tali funzioni con i privilegi di amministratore, tutti gli \ids{UID}
+ed i \ids{GID} (reali, effettivi e salvati) saranno impostati a quelli
\item Eseguire una \func{fork} e terminare immediatamente il processo padre
proseguendo l'esecuzione nel figlio. In questo modo si ha la certezza che
il figlio non è un \itindex{process~group~leader} \textit{process group
\item Eseguire una \func{fork} e terminare immediatamente il processo padre
proseguendo l'esecuzione nel figlio. In questo modo si ha la certezza che
il figlio non è un \itindex{process~group~leader} \textit{process group
chiamare \func{setsid} con successo. Inoltre la shell considererà terminato
il comando all'uscita del padre.
\item Eseguire \func{setsid} per creare una nuova sessione ed un nuovo
chiamare \func{setsid} con successo. Inoltre la shell considererà terminato
il comando all'uscita del padre.
\item Eseguire \func{setsid} per creare una nuova sessione ed un nuovo