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
.
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>.