Cuando se trata de señales POSIX, tiene dos medios a su disposición. Primero, el camino fácil (pero obsoleto), signal(). En segundo lugar, la forma más elegante, actual pero compleja, sigaction(). Use sigaction() a menos que descubra que no está disponible en alguna plataforma en la que deba trabajar.
This chapter del manual de glibc explica las diferencias entre los dos y ofrece un buen código de ejemplo sobre cómo usar ambos. También enumera las señales que se pueden manejar, recomienda cómo se manejan y profundiza más sobre cómo saber cómo se maneja (o no) actualmente cada señal dada siendo manejada. Así hay más código del que me gustaría pegar en una respuesta aquí, de ahí los enlaces.
Realmente vale la pena la hora o dos que le tomaría leer los enlaces y trabajar con los ejemplos. El manejo de señales (especialmente en programas que demonizan) es extremadamente importante. Un buen programa debe manejar todas las señales fatales que se pueden manejar (es decir, SIGHUP) e ignorar explícitamente las señales que podría no estar utilizando (es decir, SIGUSR1/SIGUSR2).
Tampoco está de más estudiar la diferencia entre las señales normales y en tiempo real, al menos hasta la comprensión de cómo el núcleo combina el anterior y no el segundo.
Una vez que lo hagas, probablemente te sientas inclinado a escribir un conjunto de funciones fáciles de modificar para manejar tus señales y volver a usar ese código una y otra vez.
Lo siento por no dar un fragmento de código rápida y sucia para mostrar cómo resolver su necesidad inmediata, pero esto no es un tema rápido y sucio :)
no recomendaría esto. Hay muy pocas instancias en las que puedo pensar que es una buena idea que un programa anule la función de cierre de Ctrl-C, una herramienta de conexión remota como SSH es una de ellas. –
Esto es solo para comprender cómo manejar Señales – Dave
Cualquier tipo de programa de intérprete debe capturar ctrl-C para abortar el programa alojado, si se está ejecutando. – Potatoswatter