GNU/Linux >> Znalost Linux >  >> Linux

Zařazení signálu do fronty v C

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í:

  1. Je zavolán první přijatý signál, jmenovitě SIGUSR1, handler a běží
  2. Druhý signál přijat, protože handler z nr1 stále běží, signál nr2 je nevyřízený a zablokován.
  3. Třetí signál přijat, protože handler z nr1 stále běží, signál 3 je vyřazen.
  4. Č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).


Linux
  1. 5 Příklady prohlášení o případu Bash

  2. Python - Zachyťte všechny signály

  3. Jak napsat obsluhu signálu pro zachycení SIGSEGV?

  1. Sledování původu signálu UNIX?

  2. Zpracování signálů UNIX/Linux:SIGEV_THREAD

  3. Linux C:Je možné po přijetí signálu znát PID odesílatele?

  1. Základy signálů Linuxu – část I

  2. Povolení Ctrl-C přerušit rozšíření C pythonu

  3. Jak se vyhnout použití printf v obslužném programu signálu?