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:
- Il primo segnale ricevuto, vale a dire SIGUSR1, viene chiamato il gestore ed è in esecuzione
- Secondo segnale ricevuto, poiché il gestore da nr1 è ancora in esecuzione, il segnale nr2 viene sospeso e bloccato.
- Terzo segnale ricevuto, poiché il gestore di nr1 è ancora in esecuzione, il segnale 3 viene scartato.
- 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).