Las SEÑALES son la forma que tienen los procesos de comunicarse entre sí, y el kernel de comunicarse con ellos. Existe un número determinado de señales que se pueden enviar a un proceso, y cada una de ellas tiene sobre él una acción distinta: pausarlo, reanudarlo, cancelarlo...
Conceptualmente, debemos entender, que un proceso recibe una señal, y tiene predeterminada una forma de actuar ante esa señal. Así, hay un conjunto de señales ante las cuales todos los procesos se comportan igual, sin embargo, hay señales ante las que procesos distintos se comportarán de manera distinta, e incluso habrá procesos que ignoren determinadas señales. Habrá otras que no podrán ignorar (la de detenerse, por ejemplo) porque son comunes a todos los procesos.
Las señales se denotan por SIGNOMBRE, donde NOMBRE es el nombre que se le da a la señal. Además, las señales más usadas tienen un número de señal asociado. Veamos las más comunes:
SIGHUP (num 1) Causa que un proceso "relea" sus archivos de configuración. Todos los programas no implementan esta señal.
SIGINT (num 2) Interrumpir (cancelar) un programa. Es la señal que se le envía a un proceso cuando presionamos Ctrl+C en teclado con un proceso en primer plano.
SIGKILL (num 9) "Matar" un proceso. Los programas no pueden decidir cómo responder a esta señal, terminan inmediatamente cuando la reciben. Sólo debería ser usada en el caso de necesitar terminar un proceso que ha dejado de responder y no funciona adecuadamente.
SIGUSR1 (num 10) Señal de usuario. Cada programa puede decidir cómo responder a esta señal.
SIGSEGV (num 11) Señal de violación de segmento (segmentation fault). Esta señal le es enviada a un proceso cuando intenta acceder a memoria que "no es suya", que está fuera de la zona de memoria que ese proceso puede usar. El proceso es detenido inmediatamente.
SIGPIPE (num 13) Tubería no existente. Esta señal se envía a un proceso que estaba escribiendo a una tubería o pipe cuando el destino de la tubería ya no existe.
SIGTERM (num 15) Terminar. Se envía esta señal a un proceso cuando queremos que termine normalmente, haciendo lo que necesite antes de terminar.
SIGCHLD (num 17) Hijo terminó. Esta señal se envía a un proceso padre automáticamente cada vez que un proceso hijo termina.
Se puede ver información más detallada sobre las señales con man signal.
El comando kill -SEÑAL PID es el que se usa para enviar señales a los procesos. Podemos indicar varios PIDs para que reciban esa señal en un solo comando separándolos con espacios al final. Son equivalentes:
# kill -SIGKILL 1283 # kill -9 1283
Mirar en cada momento qué PID tiene el proceso originado por un comando puede ser incómodo. Por eso existe el comando killall -SEÑAL nombre_comando, donde "nombre_comando" es el nombre del comando que dió lugar al proceso en cuestión.
La página del manual de kill es importante, conviene consultarla.