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