3.7. I Processi
Indietro | Capitolo 3. Basi di Unix | Avanti

## 3.7. I Processi

FreeBSD è un sistema operativo multi-tasking. Con questa capacità il sistema è come se potesse eseguire più di un programma alla volta. Ogni programma in esecuzione in un dato istante è chiamato processo. Ogni volta che esegui un comando fai partire almeno un nuovo processo, e ci sono molti processi di sistema che sono sempre in esecuzione, che permettono il corretto funzionamento del sistema.

Ogni processo è identificato in modo univoco da un numero chiamato process ID, o PID, e, come avviene per i file, ogni processo ha un proprietario e un gruppo. Le informazioni sul proprietario e sul gruppo sono usate per determinare, tramite il meccanismo dei permessi dei file discusso precedentemente, quali file e quali dispositivi il processo può aprire. Inoltre molti processi hanno un processo padre. Tale processo è il processo che li ha generati. Per esempio, se stai digitando dei comandi in shell allora la shell è un processo, così come lo sono i comandi che esegui. Ogni processo che esegui in questo modo avrà come suo processo padre la tua shell. L'eccezione a questo meccanismo è un processo speciale chiamato init(8). Il processo `init` è sempre il primo processo, quindi il suo PID è sempre 1. `init` viene avviato in modo automatico dal kernel quando si avvia FreeBSD.

Due comandi sono particolarmente utili per monitorare i processi sul sistema, ps(1) e top(1). Il comando `ps` è usato per mostrare una lista statica dei processi che sono in esecuzione in quel momento, e può mostrare i loro PID, quanta memoria stanno usando, la linea di comando che li ha avviati, e altro ancora. Il comando `top` visualizza tutti i processi in esecuzione, e aggiorna queste informazioni ogni qualche secondo, in modo che puoi vedere interattivamente cosa sta facendo il tuo computer.

Di default, `ps` mostra solo i tuoi comandi che sono in quel momento in esecuzione. Per esempio:

`%` `ps` PID TT STAT TIME COMMAND 298 p0 Ss 0:01.10 tcsh 7078 p0 S 2:40.88 xemacs mdoc.xsl (xemacs-21.1.14) 37393 p0 I 0:03.11 xemacs freebsd.dsl (xemacs-21.1.14) 48630 p0 S 2:50.89 /usr/local/lib/netscape-linux/navigator-linux-4.77.bi 48730 p0 IW 0:00.00 (dns helper) (navigator-linux-) 72210 p0 R+ 0:00.00 ps 390 p1 Is 0:01.14 tcsh 7059 p2 Is+ 1:36.18 /usr/local/bin/mutt -y 6688 p3 IWs 0:00.00 tcsh 10735 p4 IWs 0:00.00 tcsh 20256 p5 IWs 0:00.00 tcsh 262 v0 IWs 0:00.00 -tcsh (tcsh) 270 v0 IW+ 0:00.00 /bin/sh /usr/X11R6/bin/startx -- -bpp 16 280 v0 IW+ 0:00.00 xinit /home/nik/.xinitrc -- -bpp 16 284 v0 IW 0:00.00 /bin/sh /home/nik/.xinitrc 285 v0 S 0:38.45 /usr/X11R6/bin/sawfish

Come puoi vedere in questo esempio, l'output di ps(1) è organizzato in molte colonne. La colonna `PID` si riferisce al process ID discusso poco fà. I PID sono assegnati partendo dal numero 1, andando fino al 99999, e ricominciando dall'inizio una volta esauriti (se disponibili). La colonna `TT` mostra su quale tty il programma è in esecuzione, e può essere benissimo ignorata per il momento. La colonna `STAT` mostra lo stato del programma, e di nuovo, può essere benissimo ignorata. La colonna `TIME` indica per quanto tempo il programma è stato in esecuzione sulla CPU—di solito non indica il tempo trascorso da quando hai avviato il programma, poichè la maggior parte dei programmi trascorrono molto tempo in attesa per faccende che accadono prima che questi possano trascorrere del tempo in CPU. Infine, la colonna `COMMAND` indica la riga di comando che è stata utilizzata per eseguire il programma.

Il comando ps(1) supporta varie opzioni per cambiare le informazioni da visualizzare. Uno dei gruppi di opzioni più utili è `auxww`. L'opzione `a` mostra le informazioni riguardo a tutti i processi in esecuzione, non solo quelli che ti appartengono. L'opzione `u` mostra il nome utente del proprietario del processo, come pure la memoria utilizzata dal processo. L'opzione `x` mostra le informazioni riguardo ai processi demoni, e l'opzione `ww` indica a ps(1) di visualizzare la linea di comando completa che ha avviato il processo, piuttosto che troncarla quando è troppo lunga per essere adattata sullo schermo.

L'output di top(1) è simile. Un esempio di esecuzione assomiglia a questo:

`%` `top` last pid: 72257; load averages: 0.13, 0.09, 0.03 up 0+13:38:33 22:39:10 47 processes: 1 running, 46 sleeping CPU states: 12.6% user, 0.0% nice, 7.8% system, 0.0% interrupt, 79.7% idle Mem: 36M Active, 5256K Inact, 13M Wired, 6312K Cache, 15M Buf, 408K Free Swap: 256M Total, 38M Used, 217M Free, 15% Inuse PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND 72257 nik 28 0 1960K 1044K RUN 0:00 14.86% 1.42% top 7078 nik 2 0 15280K 10960K select 2:54 0.88% 0.88% xemacs-21.1.14 281 nik 2 0 18636K 7112K select 5:36 0.73% 0.73% XF86_SVGA 296 nik 2 0 3240K 1644K select 0:12 0.05% 0.05% xterm 48630 nik 2 0 29816K 9148K select 3:18 0.00% 0.00% navigator-linu 175 root 2 0 924K 252K select 1:41 0.00% 0.00% syslogd 7059 nik 2 0 7260K 4644K poll 1:38 0.00% 0.00% mutt ...

L'output è diviso in due sezioni. La parte superiore (le prime cinque linee) mostra il PID dell'ultimo processo eseguito, il carico medio del sistema (che è un indice di quanto il sistema sia impegnato), il tempo di vita del sistema (il tempo passato dall'ultimo reboot) e l'ora corrente. I restanti numeri nella parte superiore riportano quanti processi sono in esecuzione (47 in questo caso), quanta memoria di sistema e quanta memoria di swap è stata utilizzata, e quanto tempo il sistema sta trascorrendo nei vari stati di CPU.

Sotto ci sono una serie di colonne che contengono simili informazioni a quelle contenute nell'output di ps(1). Come prima puoi vedere il PID, il nome utente, quanto tempo di CPU è stato utilizzato, e il comando che era stato eseguito. Inoltre il comando top(1) di default ti mostra quanta memoria è stata concessa al processo. Questa informazione è suddivisa in due colonne, una per la dimensione totale, e l'altra per la dimensione attuale—la dimensione totale è la quantità di memoria che l'applicazione ha richiesto, e la dimensione attuale è la quantità di memoria che sta utilizzando in quel momento. In questo esempio puoi vedere che Netscape ha richiesto quasi 30 MB di RAM, ma al momento ne sta usando solo 9 MB.

Il comando top(1) aggiorna in modo automatico queste informazioni ogni due secondi; questo lasso temporale può essere modificato con l'opzione `s`.

Indietro | Risali | Avanti
3.6. Montaggio e Smontaggio dei File system | Partenza | 3.8. I Demoni, i Segnali, e come Uccidere i Processi

Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.