Provided by: manpages-de-dev_2.5-1_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-Zeitgebern 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 Zeitgebers benutzt wurde, sie ist nicht mit der durch timer_create(2)
         zurückgelieferten     Kennung     identisch.     Das    Feld    si_overrun    ist    der
         Zeitgeber-Ü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 echten 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  echte
         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-Zeitgeber 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
       durch  die  Verwendung  eines  sa_handler  mit  einem  zweiten  Argument  des  Typs struct
       sigcontext zu erhalten. 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  4.15  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>.