GNU/Linux >> Tutoriales Linux >  >> Linux

Colas de señal en C

Si se envían varias señales del mismo tipo y no se gestionan, no se ponen en cola. Di que el programa enmascara SIGUSR1 , llama al kill(getpid(), SIGUSR1) 10 veces y desenmascara SIGUSR1 . Recibirá SIGUSR1 solo una vez.


Lo que sucede es lo siguiente:

  1. Se recibe la primera señal, a saber, SIGUSR1, se llama al controlador y se está ejecutando
  2. Se recibió la segunda señal, ya que el controlador de nr1 aún se está ejecutando, la señal nr2 queda pendiente y bloqueada.
  3. Tercera señal recibida, ya que el controlador de nr1 aún se está ejecutando, la señal 3 se descarta.
  4. Se descartan las señales cuarta, quinta... etc. del mismo tipo que la señal nr1.

Una vez que el controlador de señales haya terminado con la señal nr1, procesará la señal nr2 y luego el controlador de señales procesará SIGUSR2.

Básicamente, las señales pendientes del mismo tipo no se ponen en cola, sino que se descartan. Y no, no hay una manera fácil de "ráfagas" de enviar señales de esa manera. Uno siempre asume que puede haber varias señales que se descartan, y trata de dejar que el manejador haga el trabajo de limpiar y averiguar qué hacer (como cosechar niños, si todos los niños mueren al mismo tiempo).


Linux
  1. Fundamentos de señales de Linux - Parte I

  2. ¿Cómo escribir un controlador de señal para capturar SIGSEGV?

  3. Manejo de señales UNIX/Linux:SIGEV_THREAD

  4. Linux C:al recibir una señal, ¿es posible saber el PID del remitente?

  5. Permitir que Ctrl-C interrumpa una extensión C de Python

Cómo instalar la aplicación Signal Messaging en Ubuntu 20.04

Identificar el nombre de la señal recibida en Bash

IPC usando Signals en Linux

¿Qué hilo maneja la señal?

Sistema de colas de Linux

¿Qué es un proceso detenido en Linux?