Pokud je odesláno více signálů stejného typu a není zpracováno, nejsou zařazeny do fronty. Řekněte masky programu SIGUSR1
, volá kill(getpid(), SIGUSR1)
10krát a odmaskuje SIGUSR1
. Obdrží SIGUSR1
jen jednou.
Co se stane, je následující:
- Je zavolán první přijatý signál, jmenovitě SIGUSR1, handler a běží
- Druhý signál přijat, protože handler z nr1 stále běží, signál nr2 je nevyřízený a zablokován.
- Třetí signál přijat, protože handler z nr1 stále běží, signál 3 je vyřazen.
- Čtvrtý, pátý...atd. signál stejného typu jako signál nr1 jsou vyřazeny.
Jakmile je signál handler hotový se signálem nr1, zpracuje signál nr2 a pak signál handler zpracuje SIGUSR2.
V zásadě nejsou čekající signály stejného typu zařazeny do fronty, ale vyřazeny. A ne, neexistuje žádný snadný způsob, jak „vybuchnout“ signály tímto způsobem. Vždy se předpokládá, že může existovat několik signálů, které jsou vyřazeny, a snaží se nechat psovoda, aby provedl úklid a zjistil, co má dělat (např. sklízet děti, pokud všechny děti zemřou ve stejnou dobu).
Jak rozbalit/sbalit sekce rozdílu ve Vimdiffu?
Co to znamená, když se řekne linuxové jádro je preemptivní?