X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=prochand.tex;h=8da07e6782f6d88339177dda974d1d7ce134a135;hp=ef6c064a0552dcbfa657378321a7ce663b38fbfb;hb=a54f1625cb963103b34a49e58bab1c2bc6028148;hpb=682ed599d14547e67301b35fba26c3a1cf9a39f7 diff --git a/prochand.tex b/prochand.tex index ef6c064..8da07e6 100644 --- a/prochand.tex +++ b/prochand.tex @@ -377,6 +377,7 @@ periodo di attesa. Se eseguiamo il comando senza specificare attese (come si può notare in \texttt{\small 17--19} i valori di default specificano di non attendere), otterremo come output sul terminale: +\footnotesize \begin{verbatim} [piccardi@selidor sources]$ ./forktest 3 Process 1963: forking 3 child @@ -393,6 +394,7 @@ Child 3, parent 1963, exiting Spawned 3 child, pid 1966 Go to next child \end{verbatim} %$ +\normalsize Esaminiamo questo risultato: una prima conclusione che si può trarre è non si può dire quale processo fra il padre ed il figlio venga eseguito per @@ -431,6 +433,7 @@ Un secondo aspetto molto importante nella creazione dei processi figli quello dell'interazione dei vari processi con i file; per illustrarlo meglio proviamo a redirigere su un file l'output del nostro programma di test, quello che otterremo è: +\footnotesize \begin{verbatim} [piccardi@selidor sources]$ ./forktest 3 > output [piccardi@selidor sources]$ cat output @@ -457,6 +460,7 @@ Go to next child Spawned 3 child, pid 1970 Go to next child \end{verbatim} +\normalsize che come si vede è completamente diverso da quanto ottenevamo sul terminale. Il comportamento delle varie funzioni di interfaccia con i file è analizzato @@ -660,6 +664,7 @@ avr di terminazione. Come verifica di questo comportamento possiamo eseguire il comando \cmd{forktest} imponendo a ciascun processo figlio due secondi di attesa prima di uscire, il risultato è: +\footnotesize \begin{verbatim} [piccardi@selidor sources]$ ./forktest -c2 3 Process 1972: forking 3 child @@ -676,6 +681,7 @@ Go to next child Child 2, parent 1, exiting Child 1, parent 1, exiting \end{verbatim} +\normalsize come si può notare in questo caso il processo padre si conclude prima dei figli, tornando alla shell, che stampa il prompt sul terminale: circa due secondi dopo viene stampato a video anche l'output dei tre figli che @@ -705,6 +711,7 @@ condizione: lanciamo il comando \cmd{forktest} in background, indicando al processo padre di aspettare 10 secondi prima di uscire; in questo caso, usando \cmd{ps} sullo stesso terminale (prima dello scadere dei 10 secondi) otterremo: +\footnotesize \begin{verbatim} [piccardi@selidor sources]$ ps T PID TTY STAT TIME COMMAND @@ -715,6 +722,7 @@ otterremo: 571 pts/0 Z 0:00 [forktest ] 572 pts/0 R 0:00 ps T \end{verbatim} %$ +\normalsize e come si vede, dato che non si è fatto nulla per riceverne lo stato di terminazione, i tre processi figli sono ancora presenti pur essendosi conclusi, con lo stato di zombie e l'indicazione che sono stati terminati.