Capitolo successivo Capitolo precedente Indice

15. Situazione dei processi

Le informazioni sulla situazione dei processi vengono ottenute a partire dalla tabella dei processi messa a disposizione dal kernel. Dal momento che il meccanismo attraverso cui queste informazioni possono essere ottenute dal kernel non è standardizzato per tutti i sistemi Unix, questi programmi che ne permettono la consultazione hanno raramente un funzionamento conforme.

Il meccanismo utilizzato in particolare da Linux è quello del filesystem virtuale montato nella directory /proc/.

15.1 Process status

Il controllo dello stato dei processi esistenti avviene fondamentalmente attraverso l'uso di ps, pstree e top. Il primo mostra un elenco di processi e delle loro caratteristiche, il secondo un albero che rappresenta la dipendenza gerarchica dei processi e il terzo l'evolversi dello stato di questi.

ps e pstree rappresentano la situazione di un istante: il primo si presta per eventuali rielaborazioni successive, mentre il secondo è particolarmente adatto a seguire l'evoluzione di una catena di processi, specialmente quando a un certo punto si verifica una transizione nella proprietà dello stesso (UID).

# ps [Invio]

  PID TTY STAT  TIME COMMAND
  374   1 S    0:01 /bin/login -- root 
  375   2 S    0:00 /sbin/mingetty tty2 
  376   3 S    0:00 /sbin/mingetty tty3 
  377   4 S    0:00 /sbin/mingetty tty4 
  380   5 S    0:00 /sbin/mingetty tty5 
  382   1 S    0:00 -bash 
  444  p0 S    0:00 su 
  445  p0 S    0:00 bash 
  588  p0 R    0:00 ps 

$ pstree -u -p [Invio]

init(1)-+-crond(173)
        |-gpm(314)
        |-inetd(210)
        |-kerneld(23)
        |-kflushd(2)
        |-klogd(162)
        |-kswapd(3)
        |-login(374)---bash(382)
        |-login(381)---bash(404,daniele)---startx(415)---xinit(416)-...
        |-lpd(232)
        |-mingetty(380)
        |-mingetty(375)
        |-mingetty(376)
        |-mingetty(377)
        |-named(221)
        |-nfsiod(4)
        |-nfsiod(5)
        |-nfsiod(6)
        |-nfsiod(7)
        |-portmap(184)
        |-rpc.mountd(246)
        |-rpc.nfsd(255)
        |-rxvt(433)---bash(434,daniele)---su(444,root)---bash(445)
        |-rxvt(436)---bash(437,daniele)---pstree(608)
        |-sendmail(302)
        |-snmpd(198)
        |-syslogd(153)
        `-update(379)

top invece è un programma che impegna un terminale (o una finestra di terminale) per mostrare il continuo aggiornamento della situazione. Si tratta quindi di un monitor continuo, con l'aggiunta però della possibilità di interferire con i processi inviandovi dei segnali o cambiandone il valore nice.


Il programma top.

Intestazioni

I programmi che visualizzano la situazione dei processi, utilizzano spesso delle sigle per identificare alcune caratteristiche.

La tabella (seguente) ne descrive alcune.


Sigla Descrizione
UID Il numero di UID e quindi l'utente proprietario del processo.
PID Il numero del processo, cioè il PID.
PPID Il PID del processo genitore (quello da cui ha avuto origine).
USER Il nome dell'utente proprietario del processo.
PRI La priorità del processo.
NI Il valore nice.
SIZE La dimensione dell'immagine del processo in memoria (virtuale).
RSS La dimensione della memoria RAM effettivamente utilizzata.
SWAP La dimensione della memoria di swap utilizzata.
SHARE La quantità di memoria condivisa utilizzata dal processo.
WCHAN L'evento per cui il processo è in attesa.
STAT Lo stato del processo.
TT Il terminale, se il processo ne utilizza uno.
TIME Il tempo totale di utilizzo della CPU.
CTIME Il tempo di CPU sommando anche l'utilizzo da parte dei processi figli.
COMMAND Il comando utilizzato per avviare il processo.
Elenco di alcune delle sigle utilizzate dai programmi che permettono di consultare lo stato dei processi in esecuzione.

In particolare, lo stato del processo rappresentato dalla sigla STAT, viene descritto da una o più lettere alfabetiche il cui significato viene riassunto nella tabella (seguente).


Lettera Stato
R In funzione (residente in memoria).
S In pausa o dormiente.
D In pausa non interrompibile.
T Sospeso.
Z Zombie.
W Non utilizza memoria (è completamente spostato nella memoria virtuale).
N Ha un valore nice positivo (rallentato).
Lo stato del processo espresso attraverso una o più lettere alfabetiche.

$ ps

ps [<opzioni>] [pid... ]

Visualizza un elenco dei processi in corso di esecuzione. Se non viene specificato diversamente, si ottiene solo l'elenco dei processi che appartengono all'utente. Dopo le opzioni possono essere indicati esplicitamente i processi (in forma dei numeri PID) in modo da ridurre a loro l'elenco ottenuto.

Alcune opzioni

-l

Emette un elenco ``lungo'', composto in sostanza da più elementi informativi.

-u

Formato utente: viene indicato in particolare l'utente a cui appartiene ogni processo e l'ora di inizio in cui il processo è stato avviato.

-f

Visualizza in modo semplificato, la dipendenza gerarchica tra i processi.

-a

Visualizza anche i processi appartenenti agli altri utenti.

-r

Emette l'elenco dei soli processi effettivamente in esecuzione, escludendo cioè quelli che per qualunque motivo sono in uno stato di pausa.

-h

Elimina l'intestazione dall'elenco. Può essere utile quando si vuole elaborare in qualche modo l'elenco.

-tx

Permette di ottenere l'elenco dei processi associati al terminale x. Per identificare un terminale, si può utilizzare il nome del dispositivo corrispondente, /dev/..., oppure la sigla ottenuta dal nome eliminando il prefisso tty o cu.

-e

Mostra l'ambiente particolare del processo dopo la riga di comando.

-w

Se la riga è troppo lunga consente la visualizzazione di una riga in più: l'opzione può essere indicata più volte in modo da specificare quante righe aggiuntive possono essere utilizzate.

-O[+|-]<chiave>[[+|-]<chiave>]...

--sort=[+|-]<chiave>[,[+|-]<chiave>]...

Permette di ottenere un risultato ordinato in base alle chiavi di ordinamento specificate. Le chiavi di ordinamento sono composte da una sola lettera nel caso si usi l'opzione -O, mentre sono rappresentate da una parola nel caso dell'opzione --sort.

Il segno + (sottinteso) indica un ordinamento crescente, mentre il segno - indica un ordinamento decrescente. Le chiavi di ordinamento sono indicate simbolicamente in base all'elenco (parziale) visibile nella tabella (seguente).


Chiave Chiave Descrizione
c cmd Nome dell'eseguibile.
C cmdline Riga di comando completa.
o session Numero di sessione.
p pid PID.
P ppid PPID.
r rss RSS (memoria residente utilizzata).
t tty Terminale.
T start time Orario di inizio del processo.
U uid UID.
u user Nominativo dell'utente
y priority Priorità.
Elenco di alcune delle chiavi di ordinamento utilizzabili con l'opzione -O, oppure --sort di ps.

Esempi

$ ps

Elenca i processi appartenenti all'utente che da il comando.

$ ps -a -l

Elenca tutti i processi utilizzando un formato più ampio in modo da fornire più dettagli sui processi.

$ ps -a -r

Elenca tutti i processi in funzione escludendo quelli in pausa.

$ ps -a -l -OUr

Elenca tutti i processi in formato allargato e riordinato per UID (numero utente) e quindi in base alla dimensione residente in memoria dei processi.

$ ps -a -l --sort=uid,rss

Equivalente all'esempio precedente.

$ pstree

pstree [<opzioni>] [<PID> | <utente>]

Visualizza uno schema ad albero dei processi in corso di esecuzione. È possibile specificare un numero di processo (PID), oppure il nome di un utente per limitare l'analisi. Di solito, quando da uno stesso genitore si diramano diversi processi con lo stesso nome, questi vengono raggruppati. Per cui:

init---4*[agetty]

rappresenta un gruppo di quattro processi agetty, tutti discendenti da init.

Alcune opzioni

-a

Mostra tutta la riga di comando e non solo il nome del processo.

-c

Disabilita l'aggregazione dei processi con lo stesso nome derivanti dallo stesso genitore.

-h

Evidenzia il processo corrente e i suoi predecessori (antenati).

-l

Visualizza senza troncare le righe troppo lunghe.

-p

Mostra i PID.

-u

Mostra la transizione degli UID, quando da un genitore appartenente a un certo utente, viene generato un processo che appartiene a un altro.

$ top

top [<opzioni>]

Visualizza la situazione sull'utilizzo delle risorse di sistema attraverso una tabella dell'attività principale della CPU, cioè dei processi che la impegnano maggiormente. Lo schema viene aggiornato a brevi intervalli, di conseguenza, impegna un terminale. Durante il suo funzionamento, top accetta dei comandi espressi con un singolo carattere.

Alcune opzioni

-d <secondi-di-dilazione>

Permette di specificare l'intervallo di tempo in secondi che viene lasciato trascorrere tra un aggiornamento e l'altro della tabella. Se non viene indicato questo argomento, l'intervallo di tempo tra gli aggiornamenti della tabella è di 5 secondi.

-q

Permette all'utente root di richiedere un aggiornamento della tabella in modo continuo, senza intervalli di pausa.

-s

Disabilita la possibilità di utilizzare alcuni comandi in modo interattivo. Può essere utile quando si vuole lasciare funzionare top in un terminale separato e si vogliono evitare incidenti.

-i

Permette di visualizzare anche i processi inattivi o zombie.

-c

Permette di visualizzare la riga di comando, invece del solo nome del programma.

Comandi interattivi

top accetta una serie di comandi interattivi, espressi da un singolo carattere.

h | ?

La lettera h o il simbolo ? fanno apparire un breve riassunto dei comandi e lo stato delle modalità di funzionamento.

k

Permette di inviare un segnale a un processo che verrà indicato successivamente. Se il segnale non viene specificato, viene inviato SIGTERM.

i

Abilita o disabilita la visualizzazione dei processi inattivi e dei processi zombie.

n | #

Cambia la quantità di processi da visualizzare. Il numero che esprime questa quantità viene richiesto successivamente. Il valore predefinito di questa quantità è zero, che corrisponde al numero massimo in funzione delle righe a disposizione sullo schermo (o sulla finestra) del terminale.

q

Termina l'esecuzione di top.

r

Permette di modificare il valore nice di un determinato processo. Dopo l'inserimento della lettera r, viene richiesto il PID del processo su cui agire e il valore nice. Un valore nice positivo, peggiora le prestazioni di esecuzione di un processo, mentre un valore negativo, che però può essere attribuito solo dall'utente root, migliora le prestazioni. Se non viene specificato il valore nice, si intende 10.

S

Attiva o disattiva la modalità di visualizzazione cumulativa, con la quale, la statistica sull'utilizzo di risorse da parte di ogni processo, tiene conto anche di quello dei processi figli.

s

Cambia la durata, espressa in secondi, dell'intervallo tra un aggiornamento e l'altro dei valori visualizzati. L'utente root può attribuire il valore zero che implica un aggiornamento continuo. Il valore predefinito di questa durata è di 5 secondi.

f | F

Permette di aggiungere o eliminare alcuni campi nella tabella dei processi.

15.2 Informazioni riepilogative

Oltre alle informazioni dettagliate sui processi possono essere interessanti delle informazioni riassuntive dell'uso delle risorse di sistema. In particolare si usano uptime e free. Il primo in particolare, permette di conoscere da quanto tempo è in funzione il sistema senza interruzioni, il secondo mostra l'utilizzo della memoria.

$ uptime [Invio]

  5:10pm  up  2:21,  6 users,  load average: 0.45, 0.48, 0.41

$ free [Invio]

             total       used       free     shared    buffers     cached
Mem:         22724      22340        384      13884       3664       5600
-/+ buffers:            13076       9648
Swap:        16628       6248      10380

$ uptime

uptime [<opzioni>]

Emette una sola riga contenente:

$ free

free [<opzioni>]

free emette attraverso lo standard output una serie di informazioni relative alla memoria reale e virtuale (swap).

Alcune opzioni

-b

I valori vengono espressi in byte.

-k

I valori vengono espressi in Kbyte (è la modalità predefinita).

-t

Visualizza anche una riga contenente i totali.

-o

Disabilita il cosiddetto aggiustamento dei buffer. Normalmente, senza questa opzione, la memoria destinata ai buffer viene considerata libera.

-s <secondi-di-dilazione>

Permette di ottenere un aggiornamento continuo a intervalli regolari stabiliti dal numero di secondi indicato come argomento. Questo numero può essere anche decimale.

 

1997.10.26 - Scritto da Daniele Giacomini   daniele@calion.com   (vedi copyright: Appunti Linux).


Capitolo successivo Capitolo precedente Indice