LINUX:Terminare i processi kill, killall e nohup

()

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.

 

Evitare che un processo venga chiuso: il comando nohup

Quando usciamo dalla shell il sistema nvia automaticamente un segnale di tipo HUP ai processi che abbiamo mandato in esecuzione. Tuttavia è possibile preferire che ciò non accada e che un processo sopravviva all’uscita dal sistema. Per fare ciò si ricorre al comando nohup.

Vediamo un esempio:

nohup analog /var/log/httpd/access_log &
In questo modo il comando analog (in esecuzione in background) non verrà terminato al momento della nostra uscita dal sistema ma continuerà a lavorare sino a quando non avrà concluso la sua elaborazione.

Si noti che quando si lancia un processo con nohup il sistema risponde in questo modo:

nohup: appending output to ‘hohup.out’
In pratica veniamo avvisati che il processo, una volta terminato, redirezionerà il suo stdout sul file nohup.out.

/ 5
Grazie per aver votato!

How useful was this post?

Click on a star to rate it!

Average rating / 5. Vote count:

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?