2. Controllo dei processi

Dal punto di vista del sistema operativo le applicazioni sono eseguite impiegando uno o più processi, e consumano parte delle risorse del sistema, come la memoria e l'impiego del processore. Vi presentiamo alcuni comandi utili per monitorare e gestire tali processi e, di conseguenza, le applicazioni a cui appartengono.

2.1. Informazioni sui processi

Il comando ps visualizza una lista dei processi attualmente in esecuzione sul sistema, secondo i criteri da voi stabiliti.

Digitando questo comando senza alcun argomento verranno mostrati solo i processi avviati da voi che dipendono dal terminale in uso:

$ ps
      PID TTY          TIME CMD
    18614 pts/3    00:00:00 bash
    20173 pts/3    00:00:00 ps

Le opzioni più comuni sono:

  • a: visualizza i processi avviati da tutti gli utenti;

  • x: visualizza i processi lanciati da qualsiasi terminale di controllo, non soltanto il vostro (o che non dipendono da nessun terminale);

  • u: visualizza per ciascun processo il nome dell'utente che lo ha avviato e il momento in cui è stato avviato.

2.2. Gestire i processi

I processi sono controllati per mezzo di segnali. I comandi kill e killall sono impiegati per inviare segnali ai processi. Il comando kill richiede come argomento il numero di un processo, mentre killall richiede il nome di un processo.

[Nota] Nota

Tenete presente che i processi possono reagire in modo diverso agli stessi segnali. Non potete dare per scontato che un processo si comporti come voi pensate che dovrebbe quando gli inviate un certo segnale.

kill [-SEGNALE] <numero_del_processo>
killall [-SEGNALE] <nome_del_processo>

I segnali possono essere specificati usando numeri o nomi. Digitate kill -l per visualizzare una lista dei segnali disponibili. Quelli usati più di frequente sono:

  • TERM o 15: questo è il segnale predefinito nel caso si ometta il numero o il nome del segnale. Il processo viene chiuso senza conseguenze.

  • STOP o 19: con questo segnale si mette temporaneamente in pausa un processo. Inviate il segnale CONT o 18 per far sì che riprenda l'esecuzione del processo.

  • KILL o 9: questo segnale forza la chiusura del processo. Lo si utilizza spesso per chiudere un processo che non risponde più («congelato»). Il processo viene terminato in maniera brusca.

Alcuni esempi:

  • kill 785: chiede al processo identificato dal numero 785 di terminare l'esecuzione, dandogli la possibilità di effettuare qualsiasi operazione di «pulizia» si renda necessaria;

  • kill -KILL 785: forza la terminazione del processo identificato dal numero 785 senza concedergli l'opzione di effettuare operazioni di «pulizia». Il processo termina immediatamente;

  • killall -TERM make: chiede a tutti i processi dal nome make lanciati da questo utente di finire le operazioni.

Qualunque cosa accada, avrete la possibilità di controllare soltanto i vostri processi (a meno che non siate root), pertanto non dovete preoccuparvi di danneggiare i processi di altri utenti perché non saranno interessati dai vostri comandi.

2.3. L'unione di ps e kill: top

top è un programma che può svolgere contemporaneamente le funzioni di ps e di kill; viene utilizzato anche per controllare i processi in tempo reale in quanto offre informazioni sull'uso della CPU e della memoria, sul tempo di esecuzione, etc. (si veda la Figura 8.1, «Controllo dei processi usando top»).

Figura 8.1. Controllo dei processi usando top

Controllo dei processi usando top

Il programma è interamente controllato da tastiera, e i comandi distinguono fra maiuscole e minuscole. Potete visualizzare l'aiuto premendo h. Quelli che seguono sono i comandi più utili:

  • k: invia un segnale a un processo. top vi chiederà il PID del processo, seguito dal numero o dal nome del segnale da inviare (TERM o 15 come opzione predefinita);

  • M: questo comando è usato per elencare i processi in base alla memoria utilizzata (campo %MEM);

  • P: questo comando è usato per elencare i processi in base al tempo di CPU che utilizzano (campo %CPU): questo è l'ordinamento predefinito;

  • u: questo comando serve a mostrare i processi di un utente in particolare, top vi chiederà quale. Dovrete inserire il nome dell'utente, non il suo UID. Se non fornite alcun nome, verranno visualizzati tutti i processi;

  • i: questo comando opera come un interruttore: normalmente vengono visualizzati tutti i processi, anche quelli sospesi, questo comando fa in modo che vengano mostrati solo i processi attualmente in esecuzione (i processi il cui campo STAT indica R, Running), e non gli altri. Usando di nuovo il comando si ritorna alla precedente visualizzazione.