In questa lezione vediamo come eliminare un processo o, più correttamente, come terminare un processo in esecuzione.
Come abbiamo detto, quando lanciamo un comando si avvia il corrispondente processo nel sistema. Il processo “resta in vita” sino a quando non ha concluso il suo lavoro oppure non viene terminato dall’utente. In quest’ultimo caso il processo viene interrotto brutalmente senza attendere, cioè, che giunga a conclusione.
kill
Per terminare un processo si usa il comando kill.
Questo comando, tuttavia, può essere utilizzato anche per inviare diversi segnali ai vari processi.
Per vedere l’elenco dei segnali che potete inviare digitate:
kill -l
Il nostro sistema produrrà un elenco simile a questo:
il comando kill
Si noti che questo elenco varia a seconda del sistema in uso.
I segnali più importanti che possiamo usare sono sostanzialmente quattro:
SIGHUP – è usato per inviare ad un processo una richiesta di hang-up; alcuni processi che ricevono un segnale di questo tipo provvedono a riavviarsi ricaricando il proprio file di configurazione;
SIGQUIT – è usato per inviare una richiesta di uscita ad un programma;
SIGTERM – si tratta di una richiesta piuttosto soft di terminazione: in questo caso il processo dovrebbe avviare alcune procedure prima di terminare;
SIGKILL – è usato per uccidere un processo: è assolutamente brutale ed è l’ultima risorsa quando SIGQUIT e SIGTERM non funzionano (da usare con cautela).
Come potete vedere dall’immagine qui sopra ad ogni segnale è associato un numero. Il numero di SIGKILL, ad esempio, è 9. Per inviare un segnalre di terminazione brutale ad un processo useremo una sintassi del genere:
kill -9 31177
dove -9 è il numero del segnale da inviare e 31177 e l’ID del processo che vogliamo terminare.
per verificare che il processo sia stato effettivamente terminato sarà sufficiente controllare nuovamente l’elenco dei processi. Noterete che il processo con PID 31177 non c’è più.
killall
Il comando kill, come abbiamo visto, richiede come argomento l’ID (o PID) del processo che si desidera terminare. Il comando killall, invece, richiede il nome del processo e provvederà a terminare (esattamente come accade con kill) tutti i processi corrispondenti a quel nome.
Ad esempio:
killall -9 httpd
terminerà tutte le istanze in esecuzione di httpd.