Iniziata exec
authorSimone Piccardi <piccardi@gnulinux.it>
Sun, 23 Sep 2001 21:39:41 +0000 (21:39 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Sun, 23 Sep 2001 21:39:41 +0000 (21:39 +0000)
gapil.tex
prochand.tex
session.tex [new file with mode: 0644]

index f3c17437c9efa00a1cc0c2cafdf3435d0aa8ee19..f93809919f9f3cd00a5dc3457dfd6b69daeab0e4 100644 (file)
--- a/gapil.tex
+++ b/gapil.tex
@@ -1,4 +1,4 @@
-%% 
+%%
 %% GaPiL : Guida alla Programmazione in Linux
 %%
 %% S. Piccardi Feb. 2001
index f7ac31f56ae127fc5484fabc42fd6a30aa98b55b..f8c99f2f6fee9b6263852139c93ceebd10845c34 100644 (file)
@@ -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 (file)
index 0000000..3de0e52
--- /dev/null
@@ -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}
+