Subroutine sigprocmask, sigsetmask oder sigblock

Zweck

Legt die aktuelle Signalmaske fest.

Bibliothek

Standard-C-Bibliothek (libc.a)

Syntax

#include <signal.h>
int sigprocmask ( How Set OSet)
int How;
const sigset_t *Set;
sigset *OSet;
int sigsetmask ( SignalMask)
int SignalMask;
int sigblock (SignalMask)
int SignalMask;

Beschreibung

Anmerkung: Die Subroutinen sigprocmask, sigsetmaskund sigblock dürfen nicht in einer Multithread-Anwendung verwendet werden. Stattdessen muss die Subroutine sigthreadmask (sigthreadmask Subroutine) verwendet werden.

Die Subroutine sigprocmask wird verwendet, um die Signalmaske des aufrufenden Threads zu untersuchen oder zu ändern.

Die Subroutine wird verwendet, um die Signalmaske des aufrufenden Prozesses zu untersuchen oder zu ändern.

Normalerweise sollten Sie die Subroutine sigprocmask (SIG_BLOCK) verwenden, um Signale während eines kritischen Codeabschnitts zu blockieren. Verwenden Sie dann die Subroutine sigprocmask (SIG_SETMASK) , um die Maske auf den vorherigen Wert zurückzusetzen, der von der Subroutine sigprocmask (SIG_BLOCK) zurückgegeben wurde.

Wenn nach dem Aufruf der Subroutine sigprocmask anstehende nicht geblockte Signale vorhanden sind, wird mindestens eines dieser Signale zugestellt, bevor die Subroutine sigprocmask zurückgegeben wird.

Die Subroutine sigprocmask lässt die Blockierung des Signals SIGKILL oder SIGSTOP nicht zu. Wenn ein Programm versucht, ein Signal zu blockieren, gibt die Subroutine sigprocmask keinen Hinweis auf den Fehler.

Parameter

Element Beschreibung
Vorteile Gibt an, wie die Gruppe geändert wird. Sie können einen der folgenden Werte aufweisen:
SIG_BLOCK
Der Ergebnissatz ist die Union-Verknüpfung des aktuellen Satzes und des Signalsatzes, auf den der Parameter Satz verweist.
SIG_UNBLOCK
Der Ergebnissatz ist der Schnittpunkt des aktuellen Satzes mit dem Komplement des Signalsatzes, auf den durch den Parameter Satz verwiesen wird.
SIG_SETMASK
Der Ergebnissatz ist der Signalsatz, auf den der Parameter Satz verweist.
set Gibt den Signalsatz an. Wenn der Wert des Parameters Set nicht null ist, verweist er auf eine Gruppe von Signalen, die zum Ändern der aktuell blockierten Gruppe verwendet werden sollen. Wenn der Wert des Parameters Set null ist, ist der Wert des Parameters How nicht signifikant und die Prozesssignalmaske bleibt unverändert. So kann der Aufruf verwendet werden, um aktuell blockierte Signale abzufragen.
OSet Wenn der Parameter OSet nicht der Nullwert ist, wird die zum Zeitpunkt des Aufrufs gültige Signalmaske in dem Bereich gespeichert, auf den der Parameter OSet verweist.
SignalMask Gibt die Signalmaske des Prozesses an.

Kompatibilitätsschnittstellen

Die Subroutine sigsetmask ermöglicht die Änderung der Prozesssignalmaske für die Signalwerte 1 bis 31. Dieselbe Funktion kann für alle Werte mit der Subroutine sigprocmask (SIG_SETMASK) ausgeführt werden. Das Signal des Werts i wird blockiert, wenn das i-te Bit des Parameters SignalMask gesetzt ist.

Nach erfolgreicher Beendigung gibt die Subroutine sigsetmask den Wert der vorherigen Signalmaske zurück. Schlägt das Unterprogramm fehl, wird ein Wert von -1 zurückgegeben und die globale Variable errno wird gesetzt, um den Fehler wie im Unterprogramm sigprocmask anzuzeigen.

Die Subroutine sigblock ermöglicht die logische Verknüpfung von Signalen mit den Werten 1 bis 31 in die aktuelle Prozesssignalmaske. Dieselbe Funktion kann für alle Werte mit der Subroutine sigprocmask (SIG_BLOCK) ausgeführt werden. Das Signal des Werts i wird zusätzlich zu den derzeit geblockten blockiert, wenn das i-te Bit des Parameters SignalMask gesetzt ist.

Es ist nicht möglich, ein Signal SIGKILL oder SIGSTOP mit der Subroutine sigblock oder sigsetmask zu blockieren. Diese Einschränkung wird vom System unbeaufsichtigt auferlegt, ohne einen Fehler anzuzeigen.

Nach erfolgreicher Beendigung gibt die Subroutine sigblock den Wert der vorherigen Signalmaske zurück. Schlägt das Unterprogramm fehl, wird ein Wert von -1 zurückgegeben und die globale Variable errno wird gesetzt, um den Fehler wie im Unterprogramm sigprocmask anzuzeigen.

Rückgabewerte

Nach Beendigung wird der Wert 0 zurückgegeben. Schlägt das Unterprogramm sigprocmask fehl, bleibt die Signalmaske des Prozesses unverändert, es wird der Wert -1 zurückgegeben, und die globale Variable errno wird gesetzt, um den Fehler anzuzeigen.

Fehlercodes

Die Subroutine sigprocmask ist nicht erfolgreich, wenn Folgendes zutrifft:

Element Beschreibung
EPERM Der Benutzer verfügt nicht über die Berechtigung zum Ändern der Signalmaske.
EINVAL Der Wert des Parameters How ist ungleich einem der definierten Werte.
EFAULT Die Maske des Benutzers befindet sich nicht im Prozessadressraum.

Beispiele

Geben Sie Folgendes ein, um die Signalmaske so festzulegen, dass nur das Signal SIGINT für die Zustellung blockiert wird:

 

#include <signal.h>

int return_value;
sigset_t newset;
sigset_t *newset_p;
 . . .
newset_p = &newset;
sigemptyset(newset_p);
sigaddset(newset_p, SIGINT);
return_value = sigprocmask (SIG_SETMASK, newset_p, NULL);