Quando un processo si comporta in modo anomalo, a volte potresti voler terminarlo o ucciderlo. In questo post esploreremo alcuni modi per terminare un processo o un'applicazione dalla riga di comando e da un'interfaccia grafica, utilizzando gedit come applicazione di esempio.
Utilizzo della riga di comando/caratteri di terminazione
Ctrl + C
Un problema durante l'invocazione di gedit
dalla riga di comando (se non stai usando gedit &
) è che non libererà il prompt, in modo che la sessione della shell sia bloccata. In questi casi, Ctrl+C (il tasto Control in combinazione con 'C') torna utile. Questo terminerà gedit
e tutto il lavoro andrà perso (a meno che il file non sia stato salvato). Ctrl+C invia il SIGINT
segnala a gedit
. Questo è un segnale di arresto la cui azione predefinita è terminare il processo. Indica alla shell di interrompere gedit
e torna al ciclo principale e ti verrà restituito il messaggio.
$ gedit
^C
Ctrl + Z
Questo è chiamato carattere di sospensione . Invia un SIGTSTP
segnale da elaborare. Anche questo è un segnale di arresto, ma l'azione predefinita non è uccidere ma sospendere il processo.
Si fermerà (ucciderà/termina) gedit
e restituisce il prompt della shell.
$ gedit
^Z
[1]+ Stopped gedit
$
Una volta sospeso il processo (in questo caso, gedit
), non è possibile scrivere o fare nulla in gedit
. In background, il processo diventa un lavoro . Questo può essere verificato da jobs
comando.
$ jobs
[1]+ Stopped gedit
jobs
consente di controllare più processi all'interno di una singola sessione di shell. Puoi interrompere, riprendere e spostare i lavori in background o in primo piano secondo necessità.
Riprendiamo gedit
in background e libera un prompt per eseguire altri comandi. Puoi farlo usando il bg
comando, seguito dall'ID lavoro (notare [1]
dall'output di jobs
sopra. [1]
è l'ID lavoro).
$ bg 1
[1]+ gedit &
È simile all'avvio di gedit
con &,
:
$ gedit &
Usare uccidi
kill
consente un controllo preciso sui segnali, consentendo di segnalare un processo specificando un nome o un numero di segnale, seguito da un ID processo o PID.
Cosa mi piace di kill
è che può funzionare anche con ID lavoro. Iniziamo gedit
in background usando gedit &
. Supponendo di avere un ID lavoro di gedit
dai jobs
comando, inviamo SIGINT
a gedit
:
$ kill -s SIGINT %1
Tieni presente che l'ID lavoro deve essere preceduto da %
o kill
lo considererà un PID.
kill
può funzionare senza specificare esplicitamente un segnale. In tal caso, l'azione predefinita è inviare SIGTERM
, che interromperà il processo. Esegui kill -l
per elencare tutti i nomi dei segnali e utilizzare man kill
comando per leggere la pagina man.
Usare killall
Se non vuoi specificare un ID lavoro o un PID, killall
consente 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 predefinito è SIGTERM
. Ha la possibilità di ignorare le maiuscole usando -I
:
$ gedit &
[1] 14852
$ killall -I GEDIT
[1]+ Terminated gedit
Per saperne di più sui vari flag forniti da killall
(come -u
, che ti permette di terminare i processi di proprietà dell'utente) controlla la pagina man (man killall
)
Utilizzo di xkill
Hai mai riscontrato un problema in cui un lettore multimediale, come VLC, è disattivato o bloccato? Ora puoi trovare il PID e terminare l'applicazione utilizzando uno dei comandi sopra elencati oppure utilizzare xkill
.
xkill
ti permette di uccidere una finestra usando un mouse. Esegui semplicemente xkill
in un terminale, che dovrebbe cambiare il cursore del mouse in una x o una piccola icona del teschio. Fai clic su x sulla finestra che vuoi chiudere. Fai attenzione usando xkill
, tuttavia, come spiega la sua pagina man, può essere pericoloso. Sei stato avvisato!
Fare riferimento alla pagina man di ciascun comando per ulteriori informazioni. Puoi anche esplorare comandi come pkill
e pgrep
.