Tutti i processi inoltre portano traccia del pid del genitore, chiamato in
genere \textit{ppid} (da \textit{Parente Process Id}). Questi identificativi
possono essere ottenuti da un programma usando le funzioni:
Tutti i processi inoltre portano traccia del pid del genitore, chiamato in
genere \textit{ppid} (da \textit{Parente Process Id}). Questi identificativi
possono essere ottenuti da un programma usando le funzioni:
-\begin{itemize}
- \item \texttt{pid\_t getpid(void)} restituisce il pid del processo corrente.
-
- \item \texttt{pid\_t getppid(void)} restituisce il pid del padre del processo
+\begin{functions}
+\headdecl{sys/types.h}
+\headdecl{unistd.h}
+\funcdecl{pid\_t getpid(void)} restituisce il pid del processo corrente.
+\funcdecl{pid\_t getppid(void)} restituisce il pid del padre del processo
\section{Il controllo dei processi}
\label{sec:prochand_control}
Esamineremo in questa sezione le varie funzioni per il controllo dei processi:
\section{Il controllo dei processi}
\label{sec:prochand_control}
Esamineremo in questa sezione le varie funzioni per il controllo dei processi:
\subsection{Una panoramica}
\label{sec:prochand_control_overview}
I processi vengono creati dalla funzione \texttt{fork}; in genere questa è una
\subsection{Una panoramica}
\label{sec:prochand_control_overview}
I processi vengono creati dalla funzione \texttt{fork}; in genere questa è una
basata a sua volta sulla system call \texttt{clone}, che viene usata anche per
generare i \textit{thread}. Il processo figlio creato dalla \textit{fork} è
una copia identica del processo processo padre, solo che ha un suo pid
basata a sua volta sulla system call \texttt{clone}, che viene usata anche per
generare i \textit{thread}. Il processo figlio creato dalla \textit{fork} è
una copia identica del processo processo padre, solo che ha un suo pid
terminazione del processo.
Quando un processo ha concluso il suo compito o ha incontrato un errore non
terminazione del processo.
Quando un processo ha concluso il suo compito o ha incontrato un errore non
-risolvibile esso può essere terminato con la funzione \texttt{exit} (la
-questione è più complessa ma ci torneremo più avanti). La vita del processo
+risolvibile esso può essere terminato con la funzione \texttt{exit} (si veda
+quanto discusso in \secref{sec:proc_termination}). La vita del processo
però termina solo quando viene chiamata la quando la sua conclusione viene
ricevuta dal processo padre, a quel punto tutte le risorse allocate nel
sistema ad esso associate vengono rilasciate.
Avere due processi che eseguono esattamente lo stesso codice non è molto
però termina solo quando viene chiamata la quando la sua conclusione viene
ricevuta dal processo padre, a quel punto tutte le risorse allocate nel
sistema ad esso associate vengono rilasciate.
Avere due processi che eseguono esattamente lo stesso codice non è molto
un compito specifico (ad esempio gestire una connessione dopo che questa è
stata stabilita), o fargli eseguire (come fa la shell) un altro programma. Per
questo si usa la seconda funzione fondamentale per programmazione coi processi
che è la \texttt{exec}.
Il programma che un processo sta eseguendo si chiama immagine del processo
un compito specifico (ad esempio gestire una connessione dopo che questa è
stata stabilita), o fargli eseguire (come fa la shell) un altro programma. Per
questo si usa la seconda funzione fondamentale per programmazione coi processi
che è la \texttt{exec}.
Il programma che un processo sta eseguendo si chiama immagine del processo
di caricare un'altro programma da disco sostituendo quest'ultimo alla process
image corrente, questo fa si che la precedente immagine venga completamente
cancellata e quando il nuovo programma esce anche il processo termina, senza
ritornare alla precedente immagine.
di caricare un'altro programma da disco sostituendo quest'ultimo alla process
image corrente, questo fa si che la precedente immagine venga completamente
cancellata e quando il nuovo programma esce anche il processo termina, senza
ritornare alla precedente immagine.
particolari con caratteristiche uniche rispetto a tutte le altre, infatti la
prima ritorna due volte (nel processo padre e nel figlio) mentre la seconda
non ritorna mai (in quanto con essa viene eseguito un altro programma).
particolari con caratteristiche uniche rispetto a tutte le altre, infatti la
prima ritorna due volte (nel processo padre e nel figlio) mentre la seconda
non ritorna mai (in quanto con essa viene eseguito un altro programma).
Dopo l'esecuzione di una fork sia il processo padre che il processo figlio
continuano ad essere eseguiti normalmente, ed il processo figlio esegue
Dopo l'esecuzione di una fork sia il processo padre che il processo figlio
continuano ad essere eseguiti normalmente, ed il processo figlio esegue
\label{sec:prochand_perms}
Va messo qui tutta la storia su effective, real, saved uid, e pure le cose di
\label{sec:prochand_perms}
Va messo qui tutta la storia su effective, real, saved uid, e pure le cose di