kill (Unix)

comando dei sistemi operativi Unix e Unix-like

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[1], 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[2] che invia un segnale ad un processo. Di fatto il comando kill agisce invocando l'omonima chiamata di sistema.

Il comando kill modifica

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 modifica

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:

  • dei PID, secondo le stesse convenzioni dell'omonima chiamata di sistema (per cui è anche possibile specificare 0 o -1 o valori inferiori);
  • degli identificativi di job della shell, secondo la seguente sintassi:
    • %% 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:

-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 modifica

La sintassi in questo caso è:

kill -l [valore]

Il parametro facoltativo valore può indicare:

  • il numero di un segnale, nel qual caso viene scritto sullo standard output il nome del segnale senza il prefisso "SIG";
  • il valore di uscita di un comando che è terminato a causa del ricevimento di un segnale, come ad esempio ottenuto dalla variabile speciale "$?" della shell testuale, nel qual caso viene scritto sullo standard output il nome (senza il prefisso "SIG") del segnale che ha causato la terminazione del comando.
    Notare che non è corretto specificare un valore di uscita qualsiasi, ma occorre prima accertarsi che la terminazione sia dovuta ad un segnale (tipicamente, in questo caso, il valore di uscita è maggiore di 128).

Se il parametro valore non è specificato, viene prodotto sullo standard output un elenco dei segnali noti al sistema.

Esempi modifica

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 modifica

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 modifica

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:

  • se è maggiore di 0, il segnale specificato da sig è inviato al processo avente il PID specificato;
  • se è uguale a 0, il segnale specificato da sig è inviato a tutti i processi del gruppo di processi di cui il chiamante fa parte;
  • se è uguale a -1, il segnale specificato da sig è inviato a tutti i processi del sistema a cui il chiamante ha il permesso di inviare segnali, eccetto che ad un insieme ristretto di processi che dipende dall'implementazione (tipicamente init);
  • se è minore di -1, il segnale specificato da sig sarà inviato a tutti i processi appartenenti al gruppo di processi identificato dal valore assoluto di pid.

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 modifica

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

Errori modifica

Quando kill ritorna -1, errno può valere:

  • EINVALsig non è un numero di segnale valido.
  • EPERM – Il chiamante non ha il permesso di inviare il segnale sig al processo o al gruppo di processi identificato da pid.
  • ESRCH – Non esiste processo o gruppo di processi corrispondenti al pid specificato.

Note modifica

  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 modifica

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