sigsuspend(2)

BEZEICHNUNG
sigsuspend, rt_sigsuspend - Auf ein Signal warten

BIBLIOTHEK
Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT
#include <signal.h>

int sigsuspend(const sigset_t *Maske);

    Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)):

sigsuspend():
    _POSIX_C_SOURCE

BESCHREIBUNG
sigsuspend() ersetzt temporär die Signalmaske des aufrufenden Threads mit der in Maske übergebenen Maske und suspendiert den Thread anschließend, bis ein Signal ausgeliefert wird, dessen Aktion der Aufruf eines Signal-Handhabers oder das Beenden eines Prozesses ist.

Falls das Signal den Prozess beendet, dann kehrt sigsuspend() nicht zurück. Falls das Signal abgefangen wird, dann kehrt sigsuspend() nach Rückkehr des Signal-Handhabers zurück und die Signalmaske wird auf den Zustand von vor dem Aufruf von sigsuspend() zurückgesetzt.

Es ist nicht möglich, SIGKILL oder SIGSTOP zu blockieren. Die Angabe dieser Signale in Maske hat keine Auswirkung auf die Signalmaske des Threads.

RÜCKGABEWERT
sigsuspend() liefert immer -1 zurück, wobei errno gesetzt wird, um den Fehler anzuzeigen (normalerweise EINTR).

FEHLER

EFAULT
    Maske zeigt auf Speicher, der kein gültiger Anteil des Prozessadressraums ist.

EINTR
    Der Aufruf wurde durch ein Signal unterbrochen; signal(7).

STANDARDS
POSIX.1-2024.

GESCHICHTE
POSIX.1-2001.

  Unterschiede C-Bibliothek/Kernel
Der ursprüngliche Systemaufruf hieß sigsuspend(). Als allerdings die Echtzeitsignale in Linux 2.2 hinzugefügt wurden, war der Typ sigset_t mit fester 32-bit-Größe nicht mehr für den Zweck geeignet. Konsequenterweise wurde ein neuer Systemaufruf rt_sigsuspend() hinzugefügt, um einen vergrößerten Typ sigset_t zu unterstützen. Der neue Systemaufruf akzeptiert ein zweites Argument, size_t sigsetsize, das die Größe in Byte des in Maske gesetzten Signals festlegt. Dieses Argument muss derzeit den Wert sizeof(sigset_t) (oder den Fehler, den EINVAL ergibt) haben. Die Glibc-Wrapper-Funktion sigsuspend() versteckt diese Details und ruft transparent rt_sigsuspend() auf, wenn der Kernel diesen bereitstellt.

ANMERKUNGEN
Normalerweise wird sigsuspend() im Zusammenspiel mit sigprocmask(2) verwandt, um die Auslieferung eines Signals während der Ausführung von Code in kritischen Abschnitten zu vermeiden. Der Aufrufende blockiert zuerst die Signale mit sigprocmask(2). Wenn der kritische Code abgeschlossen wurde, wartet der Aufrufende durch Aufruf von sigsuspend() mit der Signalmaske, die von sigprocmask(2) (in dem Argument oldset) zurückgeliefert wurde, auf die Signale.

Siehe sigsetops(3) für Details über das Bearbeiten von Signalgruppen.

SIEHE AUCH
kill(2), pause(2), sigaction(2), signal(2), sigprocmask(2), sigwaitinfo(2), sigsetops(3), sigwait(3), signal(7)

ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian@helgefjell.de> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer: debian-l10n-german@lists.debian.org.