GNU/Linux >> Linux Esercitazione >  >> Linux

Accodamento del segnale in C

Se più segnali dello stesso tipo vengono inviati e non gestiti, non vengono messi in coda. Dì che il programma maschera SIGUSR1 , chiama kill(getpid(), SIGUSR1) 10 volte e smaschera SIGUSR1 . Riceverà SIGUSR1 solo una volta.


Quello che succede è quanto segue:

  1. Il primo segnale ricevuto, vale a dire SIGUSR1, viene chiamato il gestore ed è in esecuzione
  2. Secondo segnale ricevuto, poiché il gestore da nr1 è ancora in esecuzione, il segnale nr2 viene sospeso e bloccato.
  3. Terzo segnale ricevuto, poiché il gestore di nr1 è ancora in esecuzione, il segnale 3 viene scartato.
  4. Il quarto, quinto...ecc segnale dello stesso tipo del segnale nr1 viene scartato.

Una volta che il gestore del segnale ha terminato con il segnale nr1, elaborerà il segnale nr2, quindi il gestore del segnale elaborerà il SIGUSR2.

Fondamentalmente, i segnali in attesa dello stesso tipo non vengono messi in coda, ma scartati. E no, non esiste un modo semplice per inviare segnali in questo modo. Si presuppone sempre che possano esserci diversi segnali che vengono scartati e si cerca di lasciare che il conduttore faccia il lavoro di pulizia e scopra cosa fare (come mietere i bambini, se tutti i bambini muoiono contemporaneamente).


Linux
  1. 5 Esempi di dichiarazioni di Bash Case

  2. Python - Intrappola tutti i segnali

  3. Come scrivere un gestore di segnale per catturare SIGSEGV?

  4. Gestione dei segnali UNIX/Linux:SIGEV_THREAD

  5. Linux C:alla ricezione di un segnale è possibile conoscere il PID del mittente?

Come installare l'app di messaggistica Signal su Ubuntu 20.04

Identificare il nome del segnale ricevuto in Bash

IPC che utilizza Signals su Linux

Sistema di accodamento Linux

Cos'è un processo interrotto in Linux?

Il segnale può essere ignorato (perso)?