sigaction

SIGACTION(2)               Linux-Programmierhandbuch              SIGACTION(2)



BEZEICHNUNG
       sigaction, rt_sigaction - Signalaktionen untersuchen und ändern

ÃBERSICHT
       #include <signal.h>

       int sigaction(int signum, const struct sigaction *act,
                     struct sigaction *oldact);

   Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):

       sigaction(): _POSIX_C_SOURCE

       siginfo_t: _POSIX_C_SOURCE >= 199309L

BESCHREIBUNG
       Der Systemaufruf sigaction wird zur Veränderung der von einem Prozess
       beim Empfang eines Signals durchgeführten Aktion benutzt. (Siehe
       signal(7) für einen Ãberblick über Signale.)

       signum legt das Signal fest und kann jedes gültige Signal auÃer
       SIGKILL und SIGSTOP sein.

       Falls act nicht NULL ist, wird die neue Aktion für Signal signum aus
       act installiert. Falls oldact nicht Null ist, wird die vorherige Aktion
       in oldact gespeichert.

       Die Struktur sigaction wird durch etwas wie das folgende definiert:

           struct sigaction {
               void     (*sa_handler)(int);
               void     (*sa_sigaction)(int, siginfo_t *, void *);
               sigset_t   sa_mask;
               int        sa_flags;
               void     (*sa_restorer)(void);
           };

       Auf einigen Architekturen ist eine Union beteiligt; weisen Sie diese
       nicht sowohl sa_handler als auch sa_sigaction zu.

       Das Feld sa_restorer ist nicht zur Verwendung durch Anwendungen
       gedacht. (POSIX spezifiziert ein Feld sa_restorer nicht.) Weitere
       Details über den Zweck dieses Feldes finden Sie in sigreturn(2).

       sa_handler legt die signum zugeordnete Funktion fest; sie könnte
       SIG_DFL als Vorgabeaktion sein, SIG_IGN, um dieses Signal zu ignorieren
       oder ein Zeiger auf eine Signalhandhabungsfunktion. Diese Funktion
       erhält die Signalnummer als einziges Argument.

       Falls SA_SIGINFO in sa_flags festgelegt ist, dann legt sa_sigaction
       (statt sa_handler) die Signal-Handhabungsfunktion für signum fest.
       Diese Funktion empfängt wie unten beschrieben drei Argumente.

       sa_mask legt eine Signalmaske fest, die angibt, welche Signale während
       der Ausführung der Signalhandhabungsfunktion blockiert (d.h. zu der
       Signalmaske des Threads, in der der Signal-Handler aufgerufen wird,
       hinzugefügt) werden sollen. Zusätzlich wird das Signal, das den
       Handler ausgelöst hat, blockiert, falls nicht der Schalter SA_NODEFER
       verwandt wurde.

       sa_flags legt eine Gruppe von Schaltern fest, die das Verhalten des
       Signals verändern. Es wird durch bitweise ODER-Verknüpfung von Null
       oder mehreren der folgenden Werte erstellt:

           SA_NOCLDSTOP
                  Falls signum SIGCHLD ist, werden keine Benachrichtigungen
                  empfangen, wenn ein Kindprozess gestoppt (d.h. wenn es
                  SIGSTOP, SIGTSTP, SIGTTIN oder SIGTTOU empfängt) oder
                  wiederaufgenommen wird (d.h. es SIGCONT empfängt) (siehe
                  wait(2)). Dieser Schalter ist nur bei der Einrichtung eines
                  Handlers für SIGCHLD von Bedeutung.

           SA_NOCLDWAIT (seit Linux 2.6)
                  Falls signum SIGCHLD ist, Kinder nicht beim Beenden in
                  Zombies umwandeln. Siehe auch waitpid(2). Dieser Schalter
                  ist nur beim Aufbau eines Handlers für SIGCHLD von
                  Bedeutung oder wenn die Zuordnung dieses Signals zu SIG_DFL
                  gesetzt wird.

                  Falls der Schalter SA_NOCLDWAIT beim Einrichten eines
                  Handlers für SIGCHLD gesetzt ist, lässt es POSIX.1
                  unspezifiziert, ob ein Signal SIGCHLD generiert wird, wenn
                  sich ein Kindprozess beendet. Unter Linux wird in diesem
                  Fall ein Signal SIGCHLD generiert, bei einigen anderen
                  Implementierungen passiert das nicht.

           SA_NODEFER
                  Es wird nicht verhindert, dass das Signal innerhalb seines
                  eigenen Signal-Handlers empfangen wird. Dieser Schalter ist
                  nur bei der Einrichtung eines Handlers von Bedeutung.
                  SA_NOMASK ist ein veraltetes, nicht standardisiertes Synonym
                  für diesen Schalter.

           SA_ONSTACK
                  Den Signal-Handler auf einen alternativen, durch
                  sigaltstack(2) bereitgestellten Signal-Stack aufrufen. Falls
                  kein alternativer Stack verfügbar ist, wird der
                  Standard-Stack verwandt. Dieser Schalter ist nur beim Aufbau
                  eines Signal-Handlers von Bedeutung.

           SA_RESETHAND
                  Stellt die Signalaktion beim Eintritt in den Signal-Handler
                  auf den Vorgabewert zurück. Dieser Schalter ist nur bei der
                  Einrichtung eines Handlers von Bedeutung. SA_ONESHOT ist ein
                  veraltetes, nicht standardisiertes Synonym für diesen
                  Schalter.

           SA_RESTART
                  Stellt ein zur BSD-Signalsemantik kompatibles Verhalten her,
                  indem bestimmte Systemaufrufe über Signale hinweg neu
                  gestartet werden können. Dieser Schalter ist nur bei der
                  Einrichtung eines Handlers von Bedeutung. Siehe signal(7)
                  für eine Diskussion bezüglich des Neustarts von
                  Systemaufrufen.

           SA_RESTORER
                  Nicht für die Verwendung von Anwendungen gedacht. Dieser
                  Schalter wird von C-Bibliotheken verwandt, um anzuzeigen,
                  dass das Feld sa_restorer die Adresse eines
                  »Signaltrampolins« enthält. Siehe sigreturn(2) für
                  weitere Details.

           SA_SIGINFO (seit Linux 2.2)
                  Der Signal-Handler erwartet drei Argumente, nicht eines. In
                  diesem Fall sollte sa_sigaction auf sa_handler gesetzt
                  werden. Dieser Schalter ist nur bei der Einrichtung eines
                  Handlers von Bedeutung.

   Das Argument siginfo_t eines SA_SIGINFO-Handlers
       Wenn der Schalter SA_SIGINFO in act.sa_flags angegeben wird, wird die
       Adresse des Signal-Handlers über das Feld act.sa_sigaction übergeben.
       Dieser Handler akzeptiert drei Argumente wie folgt:

           void
           handler(int sig, siginfo_t *info, void *ucontext)
           {
               ...
           }

       Die Bedeutung der drei Argumente im Einzelnen:

       sig    Die Anzahl der Signale, die den Aufruf des Handlers
              hervorriefen.

       info   Ein Zeiger auf ein siginfo_t. Dies ist eine Struktur, die
              weitere Informationen, wie unten beschrieben, über das Signal
              enthält.

       ucontext
              Dies ist ein Zeiger auf eine Struktur ucontext_t,
              typenumgewandelt auf void *. Die Struktur, auf die von diesem
              Feld gezeigt wird, enthält Signalkontextinformationen, die vom
              Benutzerraum-Stack durch den Kernel gespeichert wurden; für
              Details siehe sigreturn(2). Weitere Informationen über die
              Struktur ucontext_t können in getcontext(3) gefunden werden.
              Typischerweise verwendet die Handler-Funktion das dritte
              Argument nicht.

       Der Datentyp siginfo_t ist eine Struktur mit den folgenden Feldern:

           siginfo_t {
               int      si_signo;     /* Signal number */
               int      si_errno;     /* An errno value */
               int      si_code;      /* Signal code */
               int      si_trapno;    /* Trap number that caused
                                         hardware-generated signal
                                         (unused on most architectures) */
               pid_t    si_pid;       /* Sending process ID */
               uid_t    si_uid;       /* Real user ID of sending process */
               int      si_status;    /* Exit value or signal */
               clock_t  si_utime;     /* User time consumed */
               clock_t  si_stime;     /* System time consumed */
               sigval_t si_value;     /* Signal value */
               int      si_int;       /* POSIX.1b signal */
               void    *si_ptr;       /* POSIX.1b signal */
               int      si_overrun;   /* Timer overrun count;
                                         POSIX.1b timers */
               int      si_timerid;   /* Timer ID; POSIX.1b timers */
               void    *si_addr;      /* Memory location which caused fault */
               long     si_band;      /* Band event (was int in
                                         glibc 2.3.2 and earlier) */
               int      si_fd;        /* File descriptor */
               short    si_addr_lsb;  /* Least significant bit of address
                                         (since Linux 2.6.32) */
               void    *si_lower;     /* Lower bound when address violation
                                         occurred (since Linux 3.19) */
               void    *si_upper;     /* Upper bound when address violation
                                         occurred (since Linux 3.19) */
               int      si_pkey;      /* Protection key on PTE that caused
                                         fault (since Linux 4.6) */
               void    *si_call_addr; /* Address of system call instruction
                                         (since Linux 3.5) */
               int      si_syscall;   /* Number of attempted system call
                                         (since Linux 3.5) */
               unsigned int si_arch;  /* Architecture of attempted system call
                                         (since Linux 3.5) */
           }

       si_signo, si_errno und si_code sind für alle Signale definiert.
       (si_errno ist im Allgemeinen unter Linux unbenutzt). Der Rest der
       Struktur kann eine Union sein, daher sollten nur die Felder ausgelesen
       werden, die für das übergebene Signal von Bedeutung sind:

       * Signale, die mit kill(2) und sigqueue(3) gesandt werden, füllen
         si_pid und si_uid aus. Zusätzlich füllen Signale, die mit
         sigqueue(3) gesandt werden, si_int und si_ptr mit den vom Sender
         angegebenen Werten aus. Siehe sigqueue(3) für weitere Details.

       * Signale, die von POSIX.1b-Timern gesendet werden (seit Linux 2.6),
         füllen si_overrun und si_timerid. Das Feld si_timerid ist eine
         interne Kennung, die vom Kernel zur Identifikation des Timers benutzt
         wurde, sie ist nicht mit der durch timer_create(2) zurückgelieferten
         Kennung identisch. Das Feld si_overrun ist der Timer-Ãberlaufzähler.
         Dies ist die gleiche Information, wie sie durch einen Aufruf von
         timer_getoverrun(2) erhalten wird. Diese Felder sind nicht
         standardisierte Linux-Erweiterungen.

       * Signale, die der Nachrichtenbenachrichtigungswarteschlange gesandt
         werden (siehe die Beschreibung von SIGEV_SIGNAL in mq_notify(3)),
         füllen si_int/si_ptr, wobei sigev_value für mq_notify(3)
         bereitgestellt wird, si_pid mit der Prozesskennung des Absenders und
         si_uid mit der realen Benutzerkennung des Nachrichtensenders.

       * SIGCHLD füllt si_pid, si_uid, si_status, si_utime und si_stime mit
         Informationen über das Kind aus. Das Feld si_pid ist die
         Prozesskennung des Kindes; si_uid ist die reale Benutzerkennung. Das
         Feld si_status enthält den Exit-Status des Kindes (falls si_code
         CLD_EXITED ist) oder die Signalnummer, die den Prozess zur
         Zustandsänderung veranlasst hat. si_utime und si_stime enthalten die
         vom Kindprozess verwandte Benutzer- und System-CPU-Zeit, diese Felder
         enthalten nicht die Zeit von Kindern, auf die gewartet wurde (anders
         als getrusage(2) und times(2)). In Kerneln bis 2.6 und seit 2.6.27
         berichten diese Felder die CPU-Zeit in Einheiten von
         sysconf(_SC_CLK_TCK). In 2.6er Kerneln vor 2.6.27 wurden durch einen
         Fehler diese Felder in Einheiten der (konfigurierbaren) System-Jiffys
         berichtet (siehe time(7)).

       * SIGILL, SIGFPE, SIGSEGV, SIGBUS, and SIGTRAP fill in si_addr with the
         address of the fault.  On some architectures, these signals also fill
         in the si_trapno field.

         Some suberrors of SIGBUS, in particular BUS_MCEERR_AO and
         BUS_MCEERR_AR, also fill in si_addr_lsb.  This field indicates the
         least significant bit of the reported address and therefore the
         extent of the corruption.  For example, if a full page was corrupted,
         si_addr_lsb contains log2(sysconf(_SC_PAGESIZE)).  When SIGTRAP is
         delivered in response to a ptrace(2)  event (PTRACE_EVENT_foo),
         si_addr is not populated, but si_pid and si_uid are populated with
         the respective process ID and user ID responsible for delivering the
         trap.  In the case of seccomp(2), the tracee will be shown as
         delivering the event.  BUS_MCEERR_* and si_addr_lsb are
         Linux-specific extensions.

         Der Unterfehler SEGV_BNDERR von SIGSEGV belegt si_lower und si_upper.

         Der Unterfehler SEGV_PKUERR von SIGSEGV belegt si_pkey.

       * SIGIO/SIGPOLL (die zwei Namen sind unter Linux synonym) füllen
         si_band und si_fd aus. Das Ereignis si_band ist eine Bitmaske, die
         die gleichen Werte enthält, die auch durch poll(2) in das Feld
         revents eingetragen werden. Das Feld si_fd zeigt den Dateideskriptor
         an, für den ein E/A-Ereignis aufgetreten ist. Für weitere Details
         lesen Sie die Beschreibung von F_SETSIG in fcntl(2).

       * SIGSYS, erstellt (seit Linux 3.5) wenn ein Seccomp-Filter
         SECCOMP_RET_TRAP zurückliefert, füllt si_call_addr, si_syscall,
         si_arch, si_errno und andere Felder wie in seccomp(2) beschrieben
         aus.

   Das Feld si_code
       Das Feld si_code innerhalb des an den Signal-Handler SA_SIGINFO
       übergebenen Arguments siginfo_t ist ein Wert (keine Bitmaske), der
       angibt, warum dieses Signal gesendet wurde. Für ein ptrace(2)-Ereignis
       wird si_code SIGTRAP enthalten und das Ptrace-Ereignis im hohen Byte
       enthalten.

           (SIGTRAP | PTRACE_EVENT_foo << 8).

       Für ein Ereignis auÃerhalb von ptrace(2) sind die Werte, die in
       si_code erscheinen können, im Rest dieses Abschnittes beschrieben.
       Seit Glibc 2.20 werden die Definitionen der meisten dieser Symbole aus
       <signal.h> erhalten, indem Feature-Test-Makros (vor dem Einbinden
       irgendeiner Header-Datei) wie folgt definiert werden:

       *  _XOPEN_SOURCE mit dem Wert 500 oder gröÃer;

       *  _XOPEN_SOURCE und _XOPEN_SOURCE_EXTENDED; oder

       *  _POSIX_C_SOURCE mit einem Wert 200809L oder gröÃer.

       Für die Konstanten TRAP_* werden die Symboldefinitionen nur in den
       ersten zwei Fällen bereitgestellt. Vor Glibc 2.20 wurde kein
       Feature-Test-Makro zum Erhalt dieser Symbole benötigt.

       Für ein reguläres Signal zeigt die folgende Liste die Werte, die in
       si_code für jedes Signal gelegt werden können, zusammen mit dem Grund
       für die Erstellung des Signals.

           SI_USER
                  kill(2)

           SI_KERNEL
                  Vom Kernel geschickt

           SI_QUEUE
                  sigqueue(3)

           SI_TIMER
                  POSIX-Timer ausgelaufen

           SI_MESGQ (seit Linux 2.6.6)
                  POSIX-Nachrichtenwarteschlangenstatus geändert; siehe
                  mq_notify(3).

           SI_ASYNCIO
                  AIO abgeschlossen

           SI_SIGIO
                  SIGIO in die Warteschlange eingereiht (nur in Kerneln bis
                  Linux 2.2; seit Linux 2.4 füllt wie unten beschrieben
                  SIGIO/SIGPOLL in si_code).

           SI_TKILL (seit Linux 2.4.19)
                  tkill(2) oder tgkill(2)

       Die folgenden Werte können in si_code für ein Signal SIGILL gesetzt
       werden:

           ILL_ILLOPC
                  Ungültiger Opcode

           ILL_ILLOPN
                  Ungültiger Operand

           ILL_ILLADR
                  Ungültiger Adressierungsmodus

           ILL_ILLTRP
                  Illegal trap.

           ILL_PRVOPC
                  Privilegierter Opcode

           ILL_PRVREG
                  Privilegiertes Register

           ILL_COPROC
                  Koprozessorfehler

           ILL_BADSTK
                  Interner Stack-Fehler

       Die folgenden Werte können in si_code für ein Signal SIGFPE gesetzt
       werden:

           FPE_INTDIV
                  Ganzzahldivision durch Null

           FPE_INTOVF
                  Ganzzahlüberlauf

           FPE_FLTDIV
                  FlieÃkommadivision durch Null

           FPE_FLTOVF
                  FlieÃkommazahlüberlauf

           FPE_FLTUND
                  FlieÃkommazahlunterlauf

           FPE_FLTRES
                  Ungenaues FlieÃkommaergebnis

           FPE_FLTINV
                  Ungültige FlieÃkommazahlaktion

           FPE_FLTSUB
                  Index auÃerhalb des Bereichs

       Die folgenden Werte können in si_code für ein Signal SIGSEGV gesetzt
       werden:

           SEGV_MAPERR
                  Address not mapped to object.

           SEGV_ACCERR
                  Invalid permissions for mapped object.

           SEGV_BNDERR (seit Linux 3.19)
                  Adressgrenzenprüfung fehlgeschlagen

           SEGV_PKUERR (seit Linux 4.6)
                  Zugriff wurde durch Speicherschutzschlüssel verweigert.
                  Siehe pkeys(7). Der auf diesen Zugriff passende
                  Schutzschlüssel ist in si_pkey verfügbar.

       Die folgenden Werte können in si_code für ein Signal SIGBUS gesetzt
       werden:

           BUS_ADRALN
                  Ungültige Adressausrichtung.

           BUS_ADRERR
                  Nichtexistierende physische Adresse.

           BUS_OBJERR
                  Objektspezifischer Hardwarefehler.

           BUS_MCEERR_AR (seit Linux 2.6.32)
                  Hardware memory error consumed on a machine check; action
                  required.

           BUS_MCEERR_AO (seit Linux 2.6.32)
                  Hardwarespeicherfehler im Prozess erkannt aber nicht
                  verwendet; Aktion optional.

       Die folgenden Werte können in si_code für ein Signal SIGTRAP gesetzt
       werden:

           TRAP_BRKPT
                  Prozess-Unterbrechungspunkt

           TRAP_TRACE
                  Process trace trap.

           TRAP_BRANCH (seit Linux 2.4, IA64 only))
                  Process taken branch trap.

           TRAP_HWBKPT (seit Linux 2.4, IA64 only))
                  Hardware-Unterbrechungs-/Ãberwachungspunkt.

       Die folgenden Werte können in si_code für ein Signal SIGCHLD gesetzt
       werden:

           CLD_EXITED
                  Kind hat sich beendet.

           CLD_KILLED
                  Kind wurde getötet

           CLD_DUMPED
                  Kind wurde anormal beendet.

           CLD_TRAPPED
                  Traced child has trapped.

           CLD_STOPPED
                  Kind wurde gestoppt.

           CLD_CONTINUED (seit Linux 2.6.9)
                  Gestopptes Kind hat fortgefahren.

       Die folgenden Werte können in si_code für ein Signal SIGIOSIGPOLL
       gesetzt werden:

           POLL_IN
                  Dateneingabe verfügbar

           POLL_OUT
                  Ausgabepuffer verfügbar

           POLL_MSG
                  Eingabenachricht verfügbar

           POLL_ERR
                  E/A-Fehler (engl. I/O).

           POLL_PRI
                  Eingabe hoher Priorität verfügbar

           POLL_HUP
                  Gerät abgetrennt

       Die folgenden Werte können in si_code für ein Signal SIGSYS gesetzt
       werden:

           SYS_SECCOMP (seit Linux 3.5)
                  Ausgelöst durch eine seccomp(2)-Filterregel.

RÃCKGABEWERT
       sigaction() gibt bei Erfolg Null zurück. Bei einem Fehler wird -1
       zurückgegeben und errno entsprechend gesetzt.

FEHLER
       EFAULT act oder oldact zeigt aus dem vom Prozess adressierbaren
              Adressraum heraus.

       EINVAL Ein ungültiges Signal wurde angegeben. Dieser Fehler wird auch
              ausgelöst, wenn versucht wird, die Aktion für SIGKILL oder
              SIGSTOP zu ändern, da diese nicht abgefangen oder ignoriert
              werden können.

KONFORM ZU
       POSIX.1-2001, POSIX.1-2008, SVr4.

ANMERKUNGEN
       Ein mittels fork(2) erstelltes Kind erbt eine Kopie der
       Signalzuordnungen seines Elternprozesses. Während eines execve(2)
       werden die Zuordnungen von verwalteten Signalen auf die Vorgabe
       zurückgesetzt; die Zuordnung ignorierter Signale werden unverändert
       gelassen.

       Laut POSIX ist das Verhalten eines Prozesses undefiniert, nachdem er
       ein Signal SIGFPE, SIGILL oder SIGSEGV ignoriert hat, das nicht von
       kill(2) oder raise(3) erstellt wurde. Ganzzahldivision durch Null hat
       ein undefiniertes Ergebnis. Auf einigen Architekturen wird dies ein
       Signal SIGFPE hervorrufen. (Auch kann die Division der gröÃten
       negativen Ganzzahl durch -1 SIGFPE hervorrufen.) Wird dieses Signal
       ignoriert, kann eine Endlosschleife auftreten.

       POSIX.1-1990 verbot das Setzen der Aktion für SIGCHLD bis SIG_IGN.
       POSIX.1-2001 und neuer erlauben diese Möglichkeit, so dass das
       Ignorieren von SIGCHLD zur Vermeidung von Zombies verwandt werden kann
       (siehe wait(2)). Allerdings unterscheiden sich die historischen BSD-
       und System-V-Verhalten für das Ignorieren von SIGCHLD, so dass die
       einzige komplett portable Methode, um sicherzustellen, dass beendete
       Kinder nicht Zombies werden, das Fangen des Signals SIGCHLD und das
       Durchführen eines wait(2) oder ähnlichem ist.

       POSIX.1-1990 spezifizierte nur SA_NOCLDSTOP. POSIX.1-2001 fügte
       SA_NOCLDSTOP, SA_NOCLDWAIT, SA_NODEFER, SA_ONSTACK, SA_RESETHAND,
       SA_RESTART und SA_SIGINFO hinzu. Benutzung letzterer Werte in sa_flags
       könnte in Anwendungen, die für ältere UNIX-Implementierungen gedacht
       sind, weniger portabel sein.

       Der Schalter SA_RESETHAND ist zu dem SVr4-Schalter mit dem gleichen
       Namen kompatibel.

       Der Schalter SA_NODEFER ist mit dem SVr4-Schalter des gleichen Namens
       unter Kerneln 1.3.9 und neuer kompatibel. Unter älteren Kerneln
       erlaubte die Linux-Implementierung nicht das Empfangen irgendeines
       Signals, nicht nur desjenigen, das installiert wurde (was effektiv die
       Einstellungen sa_mask auÃer Kraft setzt).

       Wird sigaction mit Null als zweitem Argument aufgerufen, kann der
       augenblickliche Signal-Handler abgefragt werden. Die Funktion kann auch
       dazu benutzt werden, die Gültigkeit eines Signales für die aktuelle
       Maschine zu überprüfen, indem sie mit Null als zweitem und drittem
       Argument aufgerufen wird.

       Es ist nicht möglich, SIGKILL oder SIGSTOP zu blockieren (indem Sie in
       sa_mask festgelegt werden). Derartige Versuche werden ohne Rückmeldung
       ignoriert.

       Siehe sigsetops(3) für detaillierte Informationen über die
       Manipulation von Signalgruppen.

       Siehe signal-safety(7) für eine Liste der asynchron-signalsicheren
       Funktionen, die sicher innerhalb eines Signal-Handlers aufgerufen
       werden können.

   Unterschiede C-Bibliothek/Kernel
       Die Glibc-Wrapper-Funktion für sigaction() liefert bei Versuchen, die
       Zuordnung der zwei intern durch die NPTL-Threading-Implementierung
       verwandten Echtzeitsignale zu ändern, einen Fehler zurück. Siehe
       nptl(7) für Details.

       Auf Architekturen, bei denen das Signal-Trampolin innerhalb der
       C-Bibliothek liegt, setzt die Glibc-Wrapper-Funktion für sigaction()
       die Adresse des Trampolin-Codes in das Feld act.sa_restorer und
       SA_RESTORER in das Feld act.sa_flags. Siehe sigreturn(2).

       Der ursprüngliche Linux-Systemaufruf hieà sigaction(). Mit dem
       Hinzufügen von Echtzeitsignalen in Linux 2.2 passte der mit einer
       festen GröÃe versehene 32-Bit-Typ sigset_t nicht mehr für den Zweck.
       Daher wurde ein neuer Systemaufruf rt_sigaction() mit einem
       vergröÃerten Typ sigset_t hinzugefügt. Der neue Systemaufruf
       akzeptiert ein viertes Argument size_t sigsetsize, das die GröÃe in
       Bytes der Signalgruppe in act.sa_mask und oldact.sa_mask festlegt.
       Dieses Argument muss derzeit den Wert sizeof(sigset_t) enthalten oder
       der Fehler EINVAL tritt auf. Die Glibc-Wrapper-Funktion sigaction()
       versteckt diese Details und ruft rt_sigaction() transparent auf, wenn
       der Kernel ihn bereitstellt.

   Undokumentiert
       Vor der Einführung von SA_SIGINFO war es auch möglich, einige
       zusätzliche Informationen über das Signal zu erhalten. Dies erfolgte
       durch Bereitstellung eines sa_handler-Signal-Handlers mit einem zweiten
       Argument des Typs struct sigcontext, das die gleiche Struktur ist, wie
       jene, die im Feld uc_mcontext der Struktur ucontext übergeben wird,
       die wiederum (mittels eines Zeigers) als drittes Argument des Handlers
       sa_sigaction übergeben wird. Siehe die relevanten Kernelquellen für
       Details. Diese Verwendung ist jetzt veraltet.

FEHLER
       In Kerneln bis einschlieÃlich 2.6.13 verhinderte die Festlegung von
       SA_NODEFER in sa_flags nicht nur die Ausblendung des ausgelieferten
       Signals während der Ausführung des Handlers sondern auch der in
       sa_mask festgelegten Signale. Dieser Fehler wurde in Kernel 2.6.14
       behoben.

BEISPIEL
       Siehe mprotect(2)

SIEHE AUCH
       kill(1), kill(2), pause(2), restart_syscall(2), seccomp(2),
       sigaltstack(2), signal(2), signalfd(2), sigpending(2), sigprocmask(2),
       sigreturn(2), sigsuspend(2), wait(2), killpg(3), raise(3),
       siginterrupt(3), sigqueue(3), sigsetops(3), sigvec(3), core(5),
       signal(7)

KOLOPHON
       Diese Seite ist Teil der Veröffentlichung 5.02 des Projekts
       Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie
       Fehler gemeldet werden können sowie die aktuelle Version dieser Seite
       finden sich unter https://www.kernel.org/doc/man-pages/.


ÃBERSETZUNG
       Die deutsche Ãbersetzung dieser Handbuchseite wurde von René Tschirley
       <gremlin@cs.tu-berlin.de>, Martin Eberhard Schauer
       <Martin.E.Schauer@gmx.de> und Helge Kreutzmann <debian@helgefjell.de>
       erstellt.

       Diese Ãbersetzung ist Freie Dokumentation; lesen Sie die GNU General
       Public License Version 3 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 <debian-l10n-
       german@lists.debian.org>.



Linux                            6. März 2019                    SIGACTION(2)