Der Systemaufruf
sigaction kann zur Veränderung der Aktion für ein Signal benutzt werden.
signum gibt das Signal an, es kann jedes gültige Signal außer
SIGKILL und
SIGSTOP sein.
Wenn
act nicht Null ist, wird
act als Aktion für das Signal
signum eingebunden.
Wenn
oldact nicht Null ist, wird die vorherige Aktion in
oldact gespeichert.
Die Struktur
sigaction wird definiert durch
struct sigaction {
void (*sa_handler)(int);
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer)(void);
}
Mögliche Werte für
sa_handler sind
SIG_DFL für die voreingestellte Aktion,
SIG_IGN um dieses Signal zu ignorieren oder ein Zeiger auf eine
Signalhandlerfunktion.
sa_mask ist eine Signalmaske, die angibt, welche Signale während der
Ausführung des Signalhandlers blockiert werden sollen.
sa_flags ist das Ergebnis einer bitweisen ODER-Verknüpfung von Null oder
mehreren der folgenden Flags
SA_NOCLDSTOP |
|
Verhindert die Auslösung von SIGCHLD-Signalen wenn ein Kindprozeß
terminiert.
|
SA_ONESHOT |
|
Stellt den Ausgangszustand des Status wieder her, der vor Aufruf des
Signalhandlers vorlag. Dies ist das voreingestellte Verhalten.
|
SA_RESTART |
|
Das Gegenstück zu
SA_ONESHOT, womit der Ausgangszustand von vor Aufruf des Signalhandlers nicht
wiederhergestellt wird. Dies erlaubt kompatibles Verhalten zur BSD
Signalsemantik.
|
SA_NOMASK |
|
Es soll nicht verhindert werden, daß der Empfang des Signals selbst in
seiner Signalhandlerfunktion möglich ist.
|
Das Element
sa_restorer ist veraltet und sollte nicht mehr benutzt werden.
Die Funktion
sigprocmask wird benutzt, um die Liste der augenblicklich blockierten Signale zu
verändern. Das Verhalten der Funktion ist abhängig vom Wert von
how, das die folgenden Werte annehmen kann.
SIG_BLOCK |
|
Zu blockierende Signale sind die bereits als zu blockierenden plus die
im Argument
set angegebenen.
|
SIG_UNBLOCK |
|
Die Signale in
set werden von der Liste der zu blockierenden Signale gestrichen. Es ist
kein Fehler, Signale zu entfernen, die nicht blockiert werden sollten.
|
SIG_SETMASK |
|
Die zu blockierenden Signale sind die im Argument
set angegebenen.
|
Ist das Argument
oldset nicht Null, wird der vorherige Wert der Signalmaske in
oldset abgelegt.
Die Funktion
sigpending erlaubt die Untersuchung von bereits anliegenden weiteren Signalen,
die ausgelöst wurden, während sie blockiert waren. Die Signalmaske
wartender Signale wird in
set abgelegt.
Die Funktion
sigsuspend ersetzt termporär die Signalmaske des Prozesses mit dem Argument
mask und unterbricht den Prozeß dann bis ein Signal empfangen wird.