Come terminare un processo o fermare un programma in Linux

Quando un processo si comporta male, a volte si potrebbe desiderare di terminarlo o ucciderlo. In questo post, esploreremo alcuni modi per terminare un processo o un’applicazione sia dalla linea di comando che da un’interfaccia grafica, usando gedit come applicazione di esempio.

Utilizzando i caratteri della linea di comando/terminazione

Ctrl + C

Un problema invocando gedit dalla linea di comando (se non stai usando gedit &) è che non si libera il prompt, così la sessione di shell è bloccata. In questi casi, Ctrl+C (il tasto Control in combinazione con ‘C’) è utile. Questo terminerà gedit e tutto il lavoro sarà perso (a meno che il file sia stato salvato). Ctrl+C invia il segnale SIGINT a gedit. Questo è un segnale di stop la cui azione predefinita è terminare il processo. Indica alla shell di fermare gedit e tornare al ciclo principale, e riavrete il prompt.

$ gedit
^C

Ctrl + Z

Questo è chiamato carattere di sospensione. Invia un segnale SIGTSTP al processo. Questo è anche un segnale di stop, ma l’azione predefinita non è quella di uccidere ma di sospendere il processo.

Si fermerà (kill/terminare) gedit e tornerà il prompt della shell.

$ gedit
^Z
+ Stopped gedit
$

Una volta che il processo è sospeso (in questo caso, gedit), non è possibile scrivere o fare nulla in gedit. In background, il processo diventa un lavoro. Questo può essere verificato con il comando jobs.

$ jobs
+ Stopped gedit

jobs ti permette di controllare più processi all’interno di una singola sessione di shell. Puoi fermare, riprendere e spostare i processi in background o in primo piano secondo necessità.

Riprendiamo gedit in background e liberiamo un prompt per eseguire altri comandi. Puoi farlo usando il comando bg, seguito dall’ID del lavoro (nota dall’output di jobs sopra. è l’ID del lavoro).

$ bg 1
+ gedit &

Questo è simile all’avvio di gedit con &,:

 $ gedit &

Utilizzare kill

kill permette un controllo fine sui segnali, permettendoti di segnalare un processo specificando o un nome di segnale o un numero di segnale, seguito da un ID di processo, o PID.

Quello che mi piace di kill è che può anche lavorare con gli ID di lavoro. Avviamo gedit in background usando gedit &. Supponendo di avere un ID lavoro di gedit dal comando jobs, mandiamo SIGINT a gedit:

 $ kill -s SIGINT %1

Nota che l’ID lavoro deve essere preceduto da %, o kill lo considererà un PID.

kill può funzionare senza specificare esplicitamente un segnale. In questo caso, l’azione predefinita è inviare SIGTERM, che terminerà il processo. Eseguite kill -l per elencare tutti i nomi dei segnali e usate il comando man kill per leggere la pagina man.

Utilizzando killall

Se non volete specificare un ID o un PID di lavoro, killall vi permette di specificare un processo per nome. Il modo più semplice per terminare gedit usando killall è:

 $ killall gedit

Questo ucciderà tutti i processi con il nome gedit. Come kill, il segnale di default è SIGTERM. Ha l’opzione di ignorare il caso usando -I:

$ gedit &
14852
$ killall -I GEDIT
+ Terminated gedit

Per saperne di più sui vari flag forniti da killall (come -u, che ti permette di uccidere i processi di proprietà dell’utente) controlla la pagina man (man killall)

Usando xkill

Hai mai incontrato un problema in cui un lettore multimediale, come VLC, si è bloccato o bloccato? Ora puoi trovare il PID e uccidere l’applicazione usando uno dei comandi elencati sopra o usare xkill.

xkill ti permette di uccidere una finestra usando il mouse. Eseguite semplicemente xkill in un terminale, che dovrebbe cambiare il cursore del mouse in una x o in una piccola icona a forma di teschio. Cliccate x sulla finestra che volete chiudere. Fai attenzione ad usare xkill, anche se, come spiega la sua pagina man, può essere pericoloso. Sei stato avvisato!

Fai riferimento alla pagina man di ogni comando per maggiori informazioni. Puoi anche esplorare comandi come pkill e pgrep.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.