Las señales por defecto son manejadas por el núcleo. Los viejos sistemas Unix tenían 15 señales; ahora tienen más. Puede marcar </usr/include/signal.h>
(o matar -l). CTRL + C es la señal con el nombre SIGINT
.
La acción predeterminada para manejar cada señal se define también en el kernel, y generalmente termina el proceso que recibió la señal.
Todas las señales (pero SIGKILL
) pueden manejarse por programa.
Y esto es lo que hace la cáscara:
- Cuando la cáscara se ejecuta en modo interactivo, tiene una dirección para este modo de señal especial.
- Cuando se ejecuta un programa, por ejemplo
find
, la cáscara:
fork
sí s
- y para el niño ajustar la señal por defecto manejo
- reemplazar al niño con el comando dado (por ejemplo, con el hallazgo)
- cuando se presiona CTRL + C, shell padre manejar esta señal, pero el niño recibirá - con la acción por defecto - por terminado. (El niño puede poner en práctica el manejo de señales demasiado)
Puede trap
señales en la secuencia de comandos shell demasiado ...
y se puede establecer la señal de manipulación para su consola interactiva también, intentar introducir esto en la parte superior de ti ~/.profile
. (Asegúrese de que usted está una que ya ha entrado en y probarlo con otro terminal - se puede bloquear a sí mismo)
trap 'echo "Dont do this"' 2
Ahora, cada vez que se pulsa CTRL +C en su concha, se imprimirá un mensaje. ¡No te olvides de quitar la línea!
Si está interesado, puede verificar el viejo manejo de señales /bin/sh
en el código fuente here.
En el anterior había algunas desinformaciones en los comentarios (ahora eliminadas), por lo que si alguien interesado aquí es un enlace muy bueno - how the signal handling works.
¿Por qué terminar un hijo terminar el padre? Y no, no se necesita un manejo especial. –
@Neil Butterworth: No estoy preguntando por qué dar de baja a un niño no está terminando a un padre. La pregunta es más ¿por qué el proceso secundario obtiene el evento Ctrl-C y no el padre? – vitaut