kill (Unix)
En sistemes operatius Unix o Unix-like, kill
és una comanda utilitzada per enviar missatges senzills als processos que s'estan executant al sistema. Per defecte el missatge enviat és la senyal "TERMination" (senyal SIGTERM, de la combinació de paraules angleses SIGnal i TERMination) que demana al procés que aturi la seva execució.
El nom de la comanda kill sovint porta a confusió, per que la comanda no sempre esta associada a la eliminació de processos.
La comanda kill no és res més que una comanda que utilitza la crida de sistema homònima kill. Aquesta crida de sistema s'encarrega d'enviar una senyal a un procés identificat pel seu identificador de procés (PID).
Hi han múltiples senyals possibles que poden ser enviades a un procés (vegeu Senyal (informàtica) per a una llista completa). D'aquestes les més utilitzades són sovint les senyals SIGTERM i SIGKILL.
Quan executem:
$ kill 9678
Estem enviant al procés identificat amb l'identificador de procés (PID) 9678 la senyal per defecte (SIGTERM). Els programes que implementen un controlador per a aquesta senyal, poden realitzar operacions de neteja o operacions prèvies (com per exemple guardar la configuració actual en un fitxer) abans de finalitzar la seva execució. De totes formes, molts programes no implementen un controlador per a aquesta senyal i aleshores es crida al controlador per defecte (la implementació del qual sovint és no fer res).
Totes les senyals excepte les senyals SIGKILL i SIGSTOP poden ser interceptades (mitjançant la implementació d'un controlador) per un procés. Aquest controlador no és res més que una funció que s'executa quan el procés rep una senyal. Les dues excepcions, SIGKILL i SIGSTOP són gestionades només pel Nucli (informàtica) nucli del sistema operatiu, permetent d'aquesta forma que el nucli pugui controlar l'execució dels processos. La senyal SIGKILL elimina el procés i la senyal SIGSTOP atura la seva execució (fins que és rep una senyal SIGCONT, que indica que el procés pot continuar amb la seva execució).
Unix proveeix de de mecanismes de seguretat per tal de prevenir que usuaris sense autorització puguin aturar altres processos. El mecanisme essencial de seguretat, és que el propietari del procés que envia la senyal ha se ser el mateix que el propietari del procés que rep la senyal. La única excepció és el superusuari que pot enviar qualsevol senyal a qualsevol procés.
Les senyals disponibles tenen diferents noms i estan relacionades amb certs números. És important destacar que la relació entre nom de senyal i el seu valor numèric pot variar entre diferents implementacions de UNIX.
Exemples
Es pot enviar una senyal SIGTERM de 3 formes diferents (en l'exemple el procés té el PID 1234):
$ kill 1234
$ kill -TERM 1234
$ kill -15 1234
Tenim dos formes de finalitzar un procés amb la senyal SIGKILL:
$ kill -KILL 1234
$ kill -9 1234
Other useful signals include HUP, TRAP, INT and ALRM. A SIGINT signal can be generated very simply by pressing CTRL+C in most Unix shells. It is also common for CTRL+Z to be mapped to SIGTSTP, and for CTRL+\ (backslash) to be mapped to SIGQUIT, which can force a program to do a core dump.