X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=prochand.tex;h=e43caa970b166af4e26da74b68bc55e3dcfe2c9f;hp=40a880dddf5c867c205a0110c2d868812d32e9dc;hb=056bbc90c8a0710b57fa7b13f5f0dfdad1b3ff3f;hpb=b65121906b3a8fff20f19fa84d3a42c0877477ac diff --git a/prochand.tex b/prochand.tex index 40a880d..e43caa9 100644 --- a/prochand.tex +++ b/prochand.tex @@ -49,31 +49,28 @@ genere 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 corrente. - -\end{itemize} -(per l'accesso a queste funzioni e ai relativi tipi di dati occorre includere -gli header files \texttt{unistd.h} e \texttt{sys/types.h}). - +\end{functions} \section{Il controllo dei processi} \label{sec:prochand_control} Esamineremo in questa sezione le varie funzioni per il controllo dei processi: -la lore creazione, la terminazione, l'esecuzione di altri programmi. Prima di +la loro creazione, la terminazione, l'esecuzione di altri programmi. Prima di trattare in dettaglio le singole funzioni, faremo un'introduzione generale ai -contetti che stanno alla base della gestione dei processi in unix. +concetti che stanno alla base della gestione dei processi in unix. \subsection{Una panoramica} \label{sec:prochand_control_overview} I processi vengono creati dalla funzione \texttt{fork}; in genere questa è una -system call, ma linux però usa un'altra nomenclatura, e la funzione fork è +system call, ma Linux però usa un'altra nomenclatura, e la funzione fork è 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 @@ -86,35 +83,37 @@ una informazione abbastanza limitata (il codice di uscita) sulle cause della 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 -utile, mormalmente si genera un secondo processo per affidagli l'esecuzione di +utile, normalmente si genera un secondo processo per affidargli l'esecuzione di 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 -(\textit{process image}), le funzioni della famiglia \textit{exec} permettono +(\textit{process image}), le funzioni della famiglia \func{exec} permettono 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. -Per questo motivo la \texttt{fork} e la \texttt{exec} sono funzioni molto +Per questo motivo la \func{fork} e la \func{exec} sono funzioni molto 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). -\subsection{La funzione \texttt{fork}} +\subsection{La funzione \func{fork}} \label{sec:prochand_fork} +La funzione \func{fork} + Dopo l'esecuzione di una fork sia il processo padre che il processo figlio continuano ad essere eseguiti normalmente, ed il processo figlio esegue @@ -137,12 +136,12 @@ viene eseguito dal padre o dal figlio. \label{sec:prochand_perms} Va messo qui tutta la storia su effective, real, saved uid, e pure le cose di -linux come il filesystem uid. +Linux come il filesystem uid. \subsection{Le funzioni \texttt{setuid} e \texttt{setgid}} \label{sec:prochand_setuid} \subsection{Le funzioni \texttt{seteuid} e \texttt{setegid}} -\label{sec:prochand_setuid} +\label{sec:prochand_seteuid}