In informatica kill (dalla lingua inglese to kill, uccidere) è un comando dei sistemi operativi Unix e Unix-like, e più in generale dei sistemi POSIX, che invia un segnale ad uno o più processi tipicamente per provocarne la terminazione (come suggerisce il nome), oppure visualizza informazioni sui segnali.
kill è anche il nome di una chiamata di sistema definita dallo standard POSIX che invia un segnale ad un processo. Di fatto il comando kill agisce invocando l'omonima chiamata di sistema.
La sintassi generale del comando kill presenta due forme: una per inviare un segnale ad uno o più processi, e l'altra per ottenere informazioni sui segnali.
La sintassi in questo caso è:
kill [opzioni] [--] arg1 [arg2 …]
I parametri arg identificano i processi a cui inviare i segnali, che possono essere specificati nei due modi che seguono:
0 o -1 o valori inferiori);%% o %+: indica il job corrente;%-: indica il job precedente;%n: indica il job con identificativo n;%stringa: indica il job la cui riga di comando inizia con stringa;%?stringa: indica il job la cui riga di comando contiene stringa.Il doppio trattino -- (facoltativo) indica che i parametri successivi non sono da considerarsi opzioni.
Il comportamento predefinito è quello di inviare il segnale SIGTERM.
Tra le opzioni vi sono:
Ad esempio "kill -s SIGKILL 1234", "kill -9 1234" e "kill -KILL 1234" sono equivalenti tra loro.
La sintassi in questo caso è:
kill -l [valore]
Il parametro facoltativo valore può indicare:
Se il parametro valore non è specificato, viene prodotto sullo standard output un elenco dei segnali noti al sistema.
Manda il segnale SIGTERM ai processi aventi PID 1234 e 5689:
kill 1234 5689
Manda il segnale SIGKILL al processo 1234:
kill -s SIGKILL 1234
Manda il segnale SIGKILL al processo 1234:
kill -KILL 1234
Manda il segnale SIGKILL al processo 1234:
kill -9 1234
Elenca i segnali disponibili:
kill -l
Manda il segnale SIGTERM ai processi del job corrente della shell (solitamente l'ultimo avviato):
kill %%
Manda il segnale SIGTERM ai processi del job numero 5 della shell:
kill %5
In alcuni sistemi operativi Unix e Unix-like sono disponibili anche i comandi killall e pkill, che inviano un segnale a tutti i processi che soddisfano dei criteri di ricerca specificati come parametri. Con questi comandi è ad esempio possibile inviare un segnale a tutti i processi di un dato utente, o a tutti quelli il cui nome contiene una stringa specificata.
La chiamata di sistema kill è dichiarata nello header file signal.h:
#include <signal.h>
int kill(pid_t pid, int sig);
Prima di inviare il segnale, essa verifica che il chiamante abbia il permesso di inviare segnali al processo o al gruppo di processi indicato.
Il tipo pid_t è un tipo opaco che rappresenta un PID e che inoltre può anche assumere un valore uguale o inferiore a zero.
Il parametro pid indica il processo o il gruppo di processi a cui inviare il segnale:
Il parametro sig indica il segnale da spedire; le costanti che identificano i segnali sono elencate nello header file signal.h. Se è 0 non viene spedito alcun segnale, ma si verifica unicamente la possibilità di inviare segnali al processo o al gruppo di processi indicati.
In caso di successo viene ritornato il valore 0, altrimenti viene ritornato il valore -1 e la variabile errno indica l'errore specifico.
Quando kill ritorna -1, errno può valere: