#include #include #include /* Kleines Beispielprogramm zur Anwendung von sigprocmask () */ int main () { sigset_t addset, oldset; /* Zwei Mengen von Signalen. */ /* Die Menge addset wird mit der leeren Menge initialisiert, * dann wird das Signal SIGTERM hinzugefuegt. Bisher wurden * noch keine Signal blockiert. */ sigemptyset (&addset); sigaddset (&addset, SIGTERM); /* Alle signale, die in addset sind werden zusaetzlich zu * eventuelll bereits jetzt blockierten Signalen blockiert. * Blockierte Signale werden solange zurueckgehalten, bis * die Blockierung wieder aufgehoben wird. * Die Menge der vorher bereits blockierten Signale wird in * oldset gespeichert. */ sigprocmask (SIG_BLOCK, &addset, &oldset); /* SIGTERM an den eigenen Prozess das TERM Signal schicken. * Normalerweise wuerde das den Prozess sofort beenden, da * das signal aber blockiert wird, geschieht das erst spaeter. */ kill (0, SIGTERM); /* 10s schlafen, damit der Effekt auch beobachtet werden kann. */ sleep (10); /* Das alte Verhalten in Bezug auf blockierte Signale wieder * herstellen. */ sigprocmask (SIG_SETMASK, &oldset, NULL); /* Hier sollte sich jetzt das TERM-Signal von oben auswirken. */ printf ("OOOOps, hier sollten wir eigentlich nie ankommen\n"); return 1; }