From 5eb6fc6e2d60069d3a723309b7b490d0dd56113a Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Sun, 23 Sep 2001 21:39:41 +0000 Subject: [PATCH] Iniziata exec --- gapil.tex | 2 +- prochand.tex | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++-- session.tex | 30 +++++++++++++++++++++++++++ 3 files changed, 87 insertions(+), 3 deletions(-) create mode 100644 session.tex diff --git a/gapil.tex b/gapil.tex index f3c1743..f938099 100644 --- a/gapil.tex +++ b/gapil.tex @@ -1,4 +1,4 @@ -%% +%% %% GaPiL : Guida alla Programmazione in Linux %% %% S. Piccardi Feb. 2001 diff --git a/prochand.tex b/prochand.tex index f7ac31f..f8c99f2 100644 --- a/prochand.tex +++ b/prochand.tex @@ -974,12 +974,66 @@ sono mantenuti sono: \var{ru\_utime}, \var{ru\_stime}, \var{ru\_minflt}, \label{sec:proc_race_cond} Si definisce una \textit{race condition} il caso in cui diversi processi -stanno cercando di fare qualcosa con una risorsa comune e e il risultato -finale viene a dipendere +stanno cercando di fare qualcosa con una risorsa comune ed il risultato finale +viene a dipendere dall'ordine di esecuzione dei medesimi. Ovviamente dato che +l'ordine di esecuzione di un processo, senza appositi meccanismi di +sincronizzazione, non è assolutamente prevedibile, queste situazioni sono +fonti di errori molto subdoli, che possono verificarsi solo in condizioni +particolari e quindi difficilmente riproducibili. + \subsection{Le funzioni \texttt{exec}} \label{sec:proc_exec} +Abbiamo già detto che una delle modalità principali con cui si utilizzano i +processi in unix è quella di usarli per lanciare nuovi programmi: questo viene +fatto attraverso una delle funzioni della famiglia \func{exec}. Quando un +processo chiama una di queste funzioni esso viene completamente sostituito dal +nuovo programma; il \acr{pid} del processo non cambia, dato che non viene +creato un nuovo processo, la funzione semplicemente rimpiazza lo stack, o +heap, i dati ed il testo del processo corrente con un nuovo programma letto da +disco. + +Con \func{exec} si chiude il cerchio delle funzioni su cui si basa il +controllo dei processi in unix: con \func{fork} si crea un nuovo processo, con +\func{exec} si avvia un nuovo programma, con \func{exit} e\func{wait} si +effettua e si gestisce la conclusione dei programmi. + +Ci sono sei diverse versioni di \func{exec} (per questo la si è chiamata +famiglia di funzioni) che possono essere usate per questo compito, che in +realtà (come mostrato in \figref{fig:proc_exec_relat}), costituiscono un +front-end a \func{execve}. Il suo prototipo è: + +\begin{prototype}{unistd.h} +{int execve(const char * filename, char * const argv [], char * const envp[])} + + La funzione esegue il file o lo script indicato da \var{filename}, + passandogli la lista di argomenti indicata da \var{argv} e come ambiente la + lista di stringhe indicata da \var{envp}; entrambe le liste devono essere + terminate da un puntatore nullo. I vettori degli argomenti e dell'ambiente + possono essere acceduti dal nuovo programma quando la sua funzione + \func{main} è dichiarata nella forma \func{main(int argc, char *argv[], char + *envp[])}. + + La funzione ritorna -1 solo in caso di errore, nel qual caso caso la + variabile \texttt{errno} è settata come: + \begin{errlist} + \item \macro{EACCES} il file non è eseguibile, oppure il filesystem è + montato in \cmd{noexec}, oppure non è un file normale o un interprete. + \item \macro{EPERM} il file ha i bit \acr{suid} o \acr{sgid} ma l'utente non + è root o il filesystem è montato con \cmd{nosuid}, oppure + \item \macro{ENOEXEC} + \item \macro{ENOENT} + \item \macro{ENOTDIR} + \item \macro{ETXTBSY} + \item \macro{ENFILE} + \item \macro{EMFILE} + \item \macro{EINVAL} + \item \macro{EISDIR} + \item \macro{ELIBBAD} + \end{errlist} + ed inoltre anche \macro{EFAULT}, \macro{ENOMEM}, \macro{EIO}, \macro{ENAMETOOLONG}, \macro{E2BIG}, \macro{ELOOP}. +\end{prototype} diff --git a/session.tex b/session.tex new file mode 100644 index 0000000..3de0e52 --- /dev/null +++ b/session.tex @@ -0,0 +1,30 @@ +\chapter{Il controllo di sessione} +\label{cha:session} + +\section{Il login} +\label{sec:sess_login} + +\subsection{Il login da terminale} +\label{sec:sess_term_log} + +\subsection{Il login via rete} +\label{sec:sess_net_log} + +\section{Le relazioni fra i processi} +\label{sec:sess_relation} + +\subsection{I \textit{process group}} +\label{sec:sess_proc_group} + +\subsection{Le sessioni} +\label{sec:sess_sessions} + +\subsection{Il terminale di controllo} +\label{sec:sess_ctrl_term} + +\section{Il \textit{job control}} +\label{sec:sess_job_control} + +\subsection{La shell e i programmi} +\label{sec:sess_shell} + -- 2.30.2