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
.