Introduzione
Alcune applicazioni potrebbero iniziare a comportarsi in modo irregolare e non rispondere o iniziare a consumare molte risorse di sistema. Le applicazioni che non rispondono non possono essere riavviate perché il processo dell'applicazione originale non si arresta mai completamente. L'unica soluzione è riavviare il sistema o terminare il processo dell'applicazione.
Esistono diverse utility che ti consentono di terminare i processi errati, il comando kill
è il più comunemente usato.
Comando Kill
kill
è una shell integrata nella maggior parte delle shell derivate da Bourne come Bash e Zsh. Il comportamento del comando è leggermente diverso tra le shell e l'eseguibile autonomo /bin/kill
.
Utilizzare il comando type
per visualizzare tutte le posizioni sul proprio sistema contenenti kill
:
type -a kill
kill is a shell builtin
kill is /bin/kill
L'output sopra indica che l'integrato della shell ha la priorità sull'eseguibile autonomo e viene utilizzato ogni volta che si digita kill
. Se si desidera utilizzare il file binario, digitare il percorso completo del file /bin/kill
. In questo articolo, useremo Bash builtin.
La sintassi del comando kill
assume la forma seguente:
kill [OPTIONS] [PID]..
Il comando kill
invia un segnale a processi o gruppi di processi specificati, facendoli agire in base al segnale. Quando il segnale non è specificato, per impostazione predefinita è -15
(-TERM).
I segnali più comunemente usati sono:
1
(HUP
) - Ricarica un processo.9
(KILL
) - Termina un processo.15
(TERM
) - Arresta con grazia un processo.
Per ottenere un elenco di tutti i segnali disponibili, invoca il comando con l'opzione -l
:
kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
I segnali possono essere specificati in tre modi diversi:
- Usando il numero (es.
-1
O-s 1
). - Utilizzando il prefisso "SIG" (ad es.
-SIGHUP
O-s SIGHUP
). - Senza il prefisso "SIG" (ad es.
-HUP
O-s HUP
).
I seguenti comandi sono equivalenti tra loro:
kill -1 PID_NUMBER
kill -SIGHUP PID_NUMBER
kill -HUP PID_NUMBER
I PID forniti al comando kill
possono essere uno dei seguenti:
- Se
PID
è maggiore di zero, il segnale viene inviato al processo con ID uguale aPID
. - Se
PID
è uguale a zero, il segnale viene inviato a tutti i processi nel gruppo di processi corrente. In altre parole, il segnale viene inviato a tutti i processi appartenenti al GID della shell che ha invocato il comandokill
. Utilizzare il comandops -efj
per visualizzare gli ID del gruppo di processi (GID). - Se
PID
è uguale a-1
, il segnale viene inviato a tutti i processi con lo stesso UID dell'utente che invoca il comando. Se l'utente che sta invocando è root, il segnale viene inviato a tutti i processi tranne init e il processokill
stesso. - Se
PID
è inferiore a-1
, il segnale viene inviato a tutti i processi nel gruppo di processi e con GID uguale al valore assoluto diPID
.
Gli utenti regolari possono inviare segnali ai propri processi, ma non quelli che appartengono ad altri utenti, mentre l'utente root può inviare segnali ai processi di altri utenti.
Terminare i processi usando il comando Kill
Per terminare o terminare un processo con il comando kill
, è innanzitutto necessario trovare il numero ID del processo (PID). È possibile farlo utilizzando i comandi diversi, come top
, ps
, pidof
e pgrep
.
Supponiamo che il browser Firefox non abbia risposto e che sia necessario interrompere il processo di Firefox. Per trovare i PID del browser, utilizzare il comando pidof
:
pidof firefox
Il comando stamperà gli ID di tutti i processi di Firefox:
6263 6199 6142 6076
Una volta che conosci i numeri dei processi, puoi terminarli tutti inviando il segnale TERM
:
kill -9 2551 2514 1963 1856 1771
Invece di cercare PID e quindi terminare i processi, è possibile combinare i comandi sopra in uno:
kill -9 $(pidof firefox)
Ricaricare i processi usando il comando Kill
Un altro caso d'uso comune del comando kill
è l'invio del segnale HUP
, che indica ai processi di ricaricare le sue impostazioni.
Ad esempio, per ricaricare Nginx, è necessario inviare un segnale al processo principale. L'ID processo del processo master Nginx è reperibile nel file nginx.pid
, che in genere si trova nella directory /var/run
.
Utilizzare il comando cat
per trovare il PID principale:
cat /var/run/nginx.pid
30251
Una volta trovato il PID principale, ricarica le impostazioni di Nginx digitando:
sudo kill -1 30251
Il comando sopra deve essere eseguito come utente root o utente con privilegi sudo.
Conclusione
Il comando kill
viene utilizzato per inviare un segnale ai processi. Il segnale utilizzato più frequentemente è SIGKILL
o -9
, che termina i processi indicati.