X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=session.tex;h=7b7b738c1be28baa175c0487c699f66a07199f24;hp=58e4ddbe03ffbbdf08c4d31eb1128ef34e88c781;hb=4d9f9d2efab74ce8580fddb05dbdbe754014cdea;hpb=34f320bccbbb744f178061b94e3a7197c35edd28 diff --git a/session.tex b/session.tex index 58e4ddb..7b7b738 100644 --- a/session.tex +++ b/session.tex @@ -154,9 +154,43 @@ 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. -Ciascun gruppo di processi ha sempre un processo principale, il -\textit{process leader}, che è quello che è identificato dall'avere il suo -\acr{pgid} uguale al \acr{pid}, per +Ciascun gruppo di processi ha sempre un processo principale, il cosiddetto +\textit{process leader}, che è identificato dall'avere un \acr{pgid} uguale al +suo \acr{pid}, in genere questo è il primo processo del gruppo, che si +incarica di lanciare tutti gli altri. Un nuovo gruppo 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{process leader} di un nuovo gruppo, tutti i +successivi processi da esso creati apparterranno (a meno di non cambiare di +nuovo il \acr{pgid}) al nuovo gruppo. È possibile invece spostare un processo +da un gruppo ad un altro con la funzione \func{setpgid}, il cui prototipo è: +\begin{prototype}{unistd.h}{int setpgid(pid\_t pid, pid\_t pgid)} + Assegna al \acr{pgid} del processo \param{pid} il valore \param{pgid}. + + \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[\macro{ESRCH}] Il processo selezionato non esiste. + \item[\macro{EPERM}] Il processo selezionato non fa parte della stessa + sessione del processo corrente. + \end{errlist} + } +\end{prototype} + + + + La differenza fra i due identificatori è che un processo può cambiare \acr{pgid} soltanto ad un valore che corrisponda al