Kill (Unix)

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.

Il comando kill

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.

Invio di 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:

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:

-s segnale
Invia il segnale specificato invece di SIGTERM. Il parametro segnale può essere specificato sia in forma simbolica, con o senza il prefisso "SIG", sia in forma numerica, e può essere anche 0 per verificare solo la possibilità di spedire segnali
-segnale
Equivale all'uso di "-s segnale" (sintassi tradizionale).

Ad esempio "kill -s SIGKILL 1234", "kill -9 1234" e "kill -KILL 1234" sono equivalenti tra loro.

Informazioni sui segnali

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.

Esempi

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

Alternative

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

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.

Valore di ritorno

In caso di successo viene ritornato il valore 0, altrimenti viene ritornato il valore -1 e la variabile errno indica l'errore specifico.

Errori

Quando kill ritorna -1, errno può valere:

Note

  1. ↑ (EN) kill (utilities), in The Open Group Base Specifications Issue 7 IEEE Std 1003.1-2008. URL consultato il 14-06-2009.
  2. ↑ (EN) kill (functions), in The Open Group Base Specifications Issue 7 IEEE Std 1003.1-2008. URL consultato il 14-06-2009.

Voci correlate

  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica