Provided by: manpages-de-dev_2.15-1build1_all bug

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>.