Diversi comandi vengono utilizzati per inviare segnali ai processi per terminarli o "ucciderli". Ciò è necessario quando un processo non risponde (si blocca), causa instabilità del sistema o non riesce a cedere il controllo su un file che stai tentando di modificare.
Utilizzo del numero pid per terminare i processi
È possibile utilizzare il comando kill con la tabella dei processi per terminare i processi. Immettendo kill seguito dal PID, puoi terminare processi specifici. Tuttavia, la tabella dei processi potrebbe visualizzare processi che non ti appartengono. Come utente, puoi usare il comando kill solo con i processi di tua proprietà. Come root, puoi terminare qualsiasi processo.
Segnali di uccisione
Esistono molti modi per terminare un processo, ognuno mappato su un segnale. Questo segnale determina come terminare il processo. Alcuni segnali sono più appropriati di altri in determinate situazioni. Ad esempio, potresti voler terminare un processo con grazia, dandogli il tempo di ripulire le ultime attività. Tuttavia, alcuni processi ignoreranno questo segnale o semplicemente non riusciranno a terminare in un ragionevole lasso di tempo. Per questo, potresti dover emettere un segnale più aggressivo.
Ci sono molti diversi segnali di uccisione. Ogni segnale ha un nome e uno o più valori numerici corrispondenti; puoi usare entrambi con il comando kill. Alcuni dei segnali più comuni sono descritti di seguito:
1. SIGINT (2)
– Interrompe il processo dal terminale.
– Può essere catturato o ignorato.
– Come premere Ctrl+C
2. SIGKILL (9)
– Elimina immediatamente il processo.
– Non può essere catturato o ignorato.
– Ultima risorsa.
3. SIGTERM (15)
– Termina il processo.
– Può essere catturato o ignorato.
– Inviato dal programma e non dal terminale.
4. SIGSTOP (17, 19, 23)
– Processo di pausa.
– Impossibile catturare o ignorare.
– Inviato dal programma e non dal terminale.
5. SIGSTP (18, 20, 24)
– Sospende il processo dal terminale.
– Può essere catturato o ignorato.
– Come premere Ctrl+Z.
Demo dei segnali di uccisione
Di seguito sono riportati alcuni esempi di implementazione dei segnali di uccisione. Per terminare un processo con ID 921 in modo corretto:
$ kill 15 921
In caso contrario, per terminare immediatamente il processo:
$ kill 9 921
In alternativa, per mettere in pausa anziché rimuovere completamente il processo:
$ kill 17 921
Esempi di comando di uccisione
1. Per ottenere l'elenco dei segnali:
# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGEMT 8) SIGFPE 9) SIGKILL 10) SIGBUS 11) SIGSEGV 12) SIGSYS 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGURG 17) SIGSTOP 18) SIGTSTP 19) SIGCONT 20) SIGCHLD 21) SIGTTIN 22) SIGTTOU 23) SIGIO 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGINFO 30) SIGUSR1 31) SIGUSR2
2. Per inviare un segnale particolare:
# kill -s 9
3. Per specificare l'elenco dei processi per kill:
# kill 1234 2345 3456
4. Termina un programma utilizzando il segnale SIGTERM (termina) predefinito:
# kill process_id
5. Termina un lavoro in background:
# kill %job_id
6. Terminare un programma utilizzando il segnale SIGHUP (riagganciare). Molti demoni verranno ricaricati invece di terminare:
# kill -1|HUP process_id
7. Terminare un programma utilizzando il segnale SIGINT (interruzione). Questo viene in genere avviato dall'utente premendo `Ctrl + C`:
# kill -2|INT process_id
8. Segnala al sistema operativo di terminare immediatamente un programma (che non ha alcuna possibilità di catturare il segnale):
# kill -9|KILL process_id
9. Segnalare al sistema operativo di mettere in pausa un programma finché non viene ricevuto un segnale SIGCONT ("continua"):
# kill -17|STOP process_id
10. Invia un segnale `SIGUSR1` a tutti i processi con il GID specificato (ID gruppo):
# kill -SIGUSR1 -group_id