Librería signal.h en C

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
SIGINTInterrupción (Ctrl+C)2
SIGTERMTerminación15
SIGKILLMatar proceso (no capturable)9
SIGHUPCierre de terminal1
SIGSEGVViolación de segmento11
SIGABRTAbortado6


✅ 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)


 


Destacado

Bootloader Avanzado en Ensamblador

Bootloader Avanzado en Ensamblador Características del Bootloader Se carga en la dirección 0x7C00 (BIOS). ...