Funciones y Macros de <signal.h> en C
La librería <signal.h> en C proporciona funciones y macros para manejar señales del sistema, permitiendo capturar interrupciones como Ctrl+C, manejar errores o enviar señales a otros procesos.
1. signal() - Capturar señales
Permite establecer un manejador para una señal específica.
#include <stdio.h>
#include <signal.h>
void manejarSignal(int signo) {
printf("¡Señal capturada! Número: %d\n", signo);
}
int main() {
signal(SIGINT, manejarSignal); // Captura Ctrl+C
while (1); // Bucle infinito para probar la señal
return 0;
}
2. raise() - Enviar una señal al proceso actual
Permite emitir una señal manualmente desde el código.
#include <stdio.h>
#include <signal.h>
void manejarSignal(int signo) {
printf("¡Señal recibida! Número: %d\n", signo);
}
int main() {
signal(SIGTERM, manejarSignal);
raise(SIGTERM); // Envía SIGTERM al propio proceso
return 0;
}
3. kill() - Enviar señales a otros procesos
Permite enviar una señal a un proceso específico usando su ID (pid).
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
int main() {
pid_t pid = getpid();
printf("Enviando SIGTERM al proceso %d\n", pid);
kill(pid, SIGTERM); // Envía SIGTERM al propio proceso
return 0;
}
4. sigaction() - Configuración avanzada de señales
Más flexible que signal(), permite manejar señales con opciones avanzadas.
#include <stdio.h>
#include <signal.h>
void manejarSignal(int signo) {
printf("Capturando señal con sigaction: %d\n", signo);
}
int main() {
struct sigaction sa;
sa.sa_handler = manejarSignal;
sigaction(SIGINT, &sa, NULL); // Captura SIGINT con sigaction
while (1);
return 0;
}
5. sigset_t - Manipulación de conjuntos de señales
Se usa para bloquear o desbloquear múltiples señales en el programa.
#include <stdio.h>
#include <signal.h>
int main() {
sigset_t set;
sigemptyset(&set);
sigaddset(&set, SIGINT);
sigaddset(&set, SIGTERM);
sigprocmask(SIG_BLOCK, &set, NULL); // Bloquea señales en set
printf("SIGINT y SIGTERM están bloqueadas.\n");
return 0;
}
📌 Señales comunes en <signal.h>
| Señal | Descripción | Número |
|---|---|---|
| SIGINT | Interrupción (Ctrl+C) | 2 |
| SIGTERM | Terminación | 15 |
| SIGKILL | Matar proceso (no capturable) | 9 |
| SIGHUP | Cierre de terminal | 1 |
| SIGSEGV | Violación de segmento | 11 |
| SIGABRT | Abortado | 6 |
✅ Manejo de interrupciones del usuario (Ctrl+C, kill)
✅ Protección contra errores de segmentación (SIGSEGV)
✅ Sistemas de control de procesos y daemon en servidores
✅ Ejecución segura de tareas críticas evitando interrupciones (sigprocmask)
