Wenn mehrere Signale desselben Typs gesendet und nicht verarbeitet werden, werden sie nicht in die Warteschlange gestellt. Sagen Sie die Programmmasken SIGUSR1
, ruft kill(getpid(), SIGUSR1)
auf 10 mal und entlarvt SIGUSR1
. Es erhält SIGUSR1
nur einmal.
Folgendes passiert:
- Erstes empfangenes Signal, nämlich SIGUSR1, Handler wird aufgerufen und läuft
- Zweites Signal empfangen, da Handler von nr1 noch läuft, wird das Signal nr2 anstehend und blockiert.
- Drittes Signal empfangen, da Handler von Nr1 noch läuft, wird Signal 3 verworfen.
- Viertes, fünftes...usw. Signal des gleichen Typs wie das Signal nr1 werden verworfen.
Sobald der Signal-Handler mit Signal Nr1 fertig ist, verarbeitet er Signal Nr2, und dann verarbeitet der Signal-Handler SIGUSR2.
Grundsätzlich werden anstehende Signale des gleichen Typs nicht in die Warteschlange gestellt, sondern verworfen. Und nein, es gibt keine einfache Möglichkeit, Signale auf diese Weise zu senden. Man geht immer davon aus, dass es mehrere Signale geben kann, die verworfen werden, und versucht, den Hundeführer die Arbeit des Putzens und Ermittelns zu überlassen (z. B. Kinder ernten, wenn alle Kinder gleichzeitig sterben).