.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1994,1995 Mike Battersby .\" and Copyright 2004, 2005 Michael Kerrisk .\" based on work by faith@cs.unc.edu .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" Modified, aeb, 960424 .\" Modified Fri Jan 31 17:31:20 1997 by Eric S. Raymond .\" Modified Thu Nov 26 02:12:45 1998 by aeb - add SIGCHLD stuff. .\" Modified Sat May 8 17:40:19 1999 by Matthew Wilcox .\" add POSIX.1b signals .\" Modified Sat Dec 29 01:44:52 2001 by Evan Jones .\" SA_ONSTACK .\" Modified 2004-11-11 by Michael Kerrisk .\" Added mention of SIGCONT under SA_NOCLDSTOP .\" Added SA_NOCLDWAIT .\" Modified 2004-11-17 by Michael Kerrisk .\" Updated discussion for POSIX.1-2001 and SIGCHLD and sa_flags. .\" Formatting fixes .\" 2004-12-09, mtk, added SI_TKILL + other minor changes .\" 2005-09-15, mtk, split sigpending(), sigprocmask(), sigsuspend() .\" out of this page into separate pages. .\" 2010-06-11 Andi Kleen, add hwpoison signal extensions .\" 2010-06-11 mtk, improvements to discussion of various siginfo_t fields. .\" 2015-01-17, Kees Cook .\" Added notes on ptrace SIGTRAP and SYS_SECCOMP. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH SIGACTION 2 "21. Dezember 2020" Linux Linux\-Programmierhandbuch .SH BEZEICHNUNG sigaction, rt_sigaction \- Signalaktionen untersuchen und ändern .SH ÜBERSICHT .nf \fB#include \fP .PP \fBint sigaction(int \fP\fIsignum\fP\fB, const struct sigaction *\fP\fIakt\fP\fB,\fP \fB struct sigaction *\fP\fIaltakt\fP\fB);\fP .fi .PP .RS -4 Mit Glibc erforderliche Feature\-Test\-Makros (siehe \fBfeature_test_macros\fP(7)): .RE .PP .ad l \fBsigaction\fP(): _POSIX_C_SOURCE .PP \fIsiginfo_t\fP: _POSIX_C_SOURCE >= 199309L .ad b .SH BESCHREIBUNG Der Systemaufruf \fBsigaction\fP wird zur Veränderung der von einem Prozess beim Empfang eines Signals durchgeführten Aktion benutzt. (Siehe \fBsignal\fP(7) für einen Überblick über Signale.) .PP \fIsignum\fP legt das Signal fest und kann jedes gültige Signal außer \fBSIGKILL\fP und \fBSIGSTOP\fP sein. .PP Falls \fIakt\fP nicht NULL ist, wird die neue Aktion für Signal \fIsignum\fP aus \fIakt\fP installiert. Falls \fIaltakt\fP nicht NULL ist, wird die vorherige Aktion in \fIaltakt\fP gespeichert. .PP Die Struktur \fBsigaction\fP wird durch etwas wie das folgende definiert: .PP .in +4n .EX struct sigaction { void (*sa_handler)(int); void (*sa_sigaction)(int, siginfo_t *, void *); sigset_t sa_mask; int sa_flags; void (*sa_restorer)(void); }; .EE .in .PP Auf einigen Architekturen ist eine Union beteiligt; weisen Sie diese nicht sowohl \fIsa_handler\fP als auch \fIsa_sigaction\fP zu. .PP Das Feld \fIsa_restorer\fP ist nicht zur Verwendung durch Anwendungen gedacht. (POSIX spezifiziert ein Feld \fIsa_restorer\fP nicht.) Weitere Details über den Zweck dieses Feldes finden Sie in \fBsigreturn\fP(2). .PP \fIsa_handler\fP bestimmt die Aktion, die \fIsignum\fP zugeordnet werden soll und ist eine der folgenden: .IP * 2 \fBSIG_DFL\fP für die Standardaktion. .IP * \fBSIG_IGN\fP um dieses Signal zu ignorieren. .IP * Ein Zeiger auf eine Signalhandhabungsfunktion. Diese Funktion empfängt die Signalnummer als sein einziges Argument. .PP Falls \fBSA_SIGINFO\fP in \fIsa_flags\fP festgelegt ist, dann legt \fIsa_sigaction\fP (statt \fIsa_handler\fP) die Signal\-Handhabungsfunktion für \fIsignum\fP fest. Diese Funktion empfängt wie unten beschrieben drei Argumente. .PP \fIsa_mask\fP 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 \fBSA_NODEFER\fP verwandt wurde. .PP \fIsa_flags\fP 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: .TP \fBSA_NOCLDSTOP\fP Falls \fIsignum\fP \fBSIGCHLD\fP ist, werden keine Benachrichtigungen empfangen, wenn ein Kindprozess gestoppt (d.h. wenn es \fBSIGSTOP\fP, \fBSIGTSTP\fP, \fBSIGTTIN\fP oder \fBSIGTTOU\fP empfängt) oder wiederaufgenommen wird (d.h. es \fBSIGCONT\fP empfängt) (siehe \fBwait\fP(2)). Dieser Schalter ist nur bei der Einrichtung eines Handlers für \fBSIGCHLD\fP von Bedeutung. .TP \fBSA_NOCLDWAIT\fP (seit Linux 2.6) .\" To be precise: Linux 2.5.60 -- MTK Falls \fIsignum\fP \fBSIGCHLD\fP ist, Kinder nicht beim Beenden in Zombies umwandeln. Siehe auch \fBwaitpid\fP(2). Dieser Schalter ist nur beim Aufbau eines Handlers für \fBSIGCHLD\fP von Bedeutung oder wenn die Zuordnung dieses Signals zu \fBSIG_DFL\fP gesetzt wird. .IP Falls der Schalter \fBSA_NOCLDWAIT\fP beim Einrichten eines Handlers für \fBSIGCHLD\fP gesetzt ist, lässt es POSIX.1 unspezifiziert, ob ein Signal \fBSIGCHLD\fP generiert wird, wenn sich ein Kindprozess beendet. Unter Linux wird in diesem Fall ein Signal \fBSIGCHLD\fP generiert, bei einigen anderen Implementierungen passiert das nicht. .TP \fBSA_NODEFER\fP Fügt das Signal nicht zu der Signalmaske des Threads hinzu, während der Handler ausgeführt wird, außer das Signal ist in \fIact.sa_mask\fP festgelegt. Folgerichtig kann eine weitere Instanz des Signals an den Thread ausgeliefert werden, während er den Handler ausführt. Dieser Schalter ist nur beim Aufbau eines Signal\-Handlers von Bedeutung. .IP \fBSA_NOMASK\fP ist ein veraltetes, nicht standardisiertes Synonym für diesen Schalter. .TP \fBSA_ONSTACK\fP Den Signal\-Handler auf einen alternativen, durch \fBsigaltstack\fP(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. .TP \fBSA_RESETHAND\fP 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. .IP \fBSA_ONESHOT\fP ist ein veraltetes, nicht standardisiertes Synonym für diesen Schalter. .TP \fBSA_RESTART\fP 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 \fBsignal\fP(7) für eine Diskussion bezüglich des Neustarts von Systemaufrufen. .TP \fBSA_RESTORER\fP \fINicht für die Verwendung von Anwendungen gedacht\fP. Dieser Schalter wird von C\-Bibliotheken verwandt, um anzuzeigen, dass das Feld \fIsa_restorer\fP die Adresse eines »Signaltrampolins« enthält. Siehe \fBsigreturn\fP(2) für weitere Details. .TP \fBSA_SIGINFO\fP (seit Linux 2.2) .\" (The .\" .I sa_sigaction .\" field was added in Linux 2.1.86.) .\" Der Signal\-Handler erwartet drei Argumente, nicht eines. In diesem Fall sollte \fIsa_sigaction\fP auf \fIsa_handler\fP gesetzt werden. Dieser Schalter ist nur bei der Einrichtung eines Handlers von Bedeutung. .SS "Das Argument siginfo_t eines SA_SIGINFO\-Handlers" Wenn der Schalter \fBSA_SIGINFO\fP in \fIact.sa_flags\fP angegeben wird, wird die Adresse des Signal\-Handlers über das Feld \fIact.sa_sigaction\fP übergeben. Dieser Handler akzeptiert drei Argumente wie folgt: .PP .in +4n .EX void handler(int sig, siginfo_t *info, void *ucontext) { ... } .EE .in .PP Die Bedeutung der drei Argumente im Einzelnen: .TP \fIsig\fP Die Anzahl der Signale, die den Aufruf des Handlers hervorriefen. .TP \fIinfo\fP Ein Zeiger auf ein \fIsiginfo_t\fP. Dies ist eine Struktur, die weitere Informationen, wie unten beschrieben, über das Signal enthält. .TP \fIucontext\fP Dies ist ein Zeiger auf eine Struktur \fIucontext_t\fP, typenumgewandelt auf \fIvoid\ *\fP. 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 \fBsigreturn\fP(2). Weitere Informationen über die Struktur \fIucontext_t\fP können in \fBgetcontext\fP(3) und \fBsignal\fP(7) gefunden werden. Typischerweise verwendet die Handler\-Funktion das dritte Argument nicht. .PP Der Datentyp \fIsiginfo_t\fP ist eine Struktur mit den folgenden Feldern: .PP .in +4n .EX .\" FIXME .\" The siginfo_t 'si_trapno' field seems to be used .\" only on SPARC and Alpha; this page could use .\" a little more detail on its purpose there. .\" In the kernel: si_tid siginfo_t { int si_signo; /* Signalnummer */ int si_errno; /* Ein Errno\-Wert */ int si_code; /* Signal\-Code */ int si_trapno; /* Ausnahmebehandlungsnummer die das Hardware\- gestüzte Signal hervorrief (auf den meisten Architekturen unbenutzt) */ pid_t si_pid; /* Senden der Prozesskennung */ uid_t si_uid; /* Echte Benutzerkennung des sendenden Prozesses */ int si_status; /* Exit\-Wert oder \-Signal */ clock_t si_utime; /* Verbrauchte Benutzerzeit */ clock_t si_stime; /* Verbrauchte Systemzeit */ union sigval si_value; /* Signalwert */ int si_int; /* POSIX.1b\-Signal */ void *si_ptr; /* POSIX.1b\-Signal */ int si_overrun; /* Timer\-Überlaufzähler; POSIX.1b\-Timer */ int si_timerid; /* Timer\-Kennung; POSIX.1b\-Timer */ void *si_addr; /* Speicherort, der die Ausnahmebehnadlung auslöste */ long si_band; /* Bandeereignis (war \fIint\fP in Glibc 2.3.2 und älter) */ int si_fd; /* Dateideskriptor */ short si_addr_lsb; /* Niedrigstes Bit der Adresse (seit Linux 2.6.32) */ void *si_lower; /* Untere Grenze bei Adresssverletzung aufgetreten (seit Linux 3.19) */ void *si_upper; /* Obere Grenze bei Adresssverletzung aufgetreten (seit Linux 3.19) */ int si_pkey; /* Schutzschlüssel auf PTE der die Ausnahmebehandlung auslöste (seit Linux 4.6) */ void *si_call_addr; /* Adresse der Systemaufrufanweisung (seit Linux 3.5) */ int si_syscall; /* Nummer des versuchten Systemaufrufs (seit Linux 3.5) */ unsigned int si_arch; /* Architektur des versuchten Systemaufrufs (seit Linux 3.5) */ } .EE .in .PP \fIsi_signo\fP, \fIsi_errno\fP und \fIsi_code\fP sind für alle Signale definiert. (\fIsi_errno\fP 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: .IP * 2 Signale, die mit \fBkill\fP(2) und \fBsigqueue\fP(3) gesandt werden, füllen \fIsi_pid\fP und \fIsi_uid\fP aus. Zusätzlich füllen Signale, die mit \fBsigqueue\fP(3) gesandt werden, \fIsi_int\fP und \fIsi_ptr\fP mit den vom Sender angegebenen Werten aus. Siehe \fBsigqueue\fP(3) für weitere Details. .IP * Signale, die von POSIX.1b\-Timern gesendet werden (seit Linux 2.6), füllen \fIsi_overrun\fP und \fIsi_timerid\fP. Das Feld \fIsi_timerid\fP ist eine interne Kennung, die vom Kernel zur Identifikation des Timers benutzt wurde, sie ist nicht mit der durch \fBtimer_create\fP(2) zurückgelieferten Kennung identisch. Das Feld \fIsi_overrun\fP ist der Timer\-Überlaufzähler. Dies ist die gleiche Information, wie sie durch einen Aufruf von \fBtimer_getoverrun\fP(2) erhalten wird. Diese Felder sind nicht standardisierte Linux\-Erweiterungen. .IP * Signale, die der Nachrichtenbenachrichtigungswarteschlange gesandt werden (siehe die Beschreibung von \fBSIGEV_SIGNAL\fP in \fBmq_notify\fP(3)), füllen \fIsi_int\fP/\fIsi_ptr\fP, wobei \fIsigev_value\fP für \fBmq_notify\fP(3) bereitgestellt wird, \fIsi_pid\fP mit der Prozesskennung des Absenders und \fIsi_uid\fP mit der realen Benutzerkennung des Nachrichtensenders. .IP * .\" FIXME . .\" When si_utime and si_stime where originally implemented, the .\" measurement unit was HZ, which was the same as clock ticks .\" (sysconf(_SC_CLK_TCK)). In 2.6, HZ became configurable, and .\" was *still* used as the unit to return the info these fields, .\" with the result that the field values depended on the .\" configured HZ. Of course, the should have been measured in .\" USER_HZ instead, so that sysconf(_SC_CLK_TCK) could be used to .\" convert to seconds. I have a queued patch to fix this: .\" http://thread.gmane.org/gmane.linux.kernel/698061/ . .\" This patch made it into 2.6.27. .\" But note that these fields still don't return the times of .\" waited-for children (as is done by getrusage() and times() .\" and wait4()). Solaris 8 does include child times. \fBSIGCHLD\fP füllt \fIsi_pid\fP, \fIsi_uid\fP, \fIsi_status\fP, \fIsi_utime\fP und \fIsi_stime\fP mit Informationen über das Kind aus. Das Feld \fIsi_pid\fP ist die Prozesskennung des Kindes; \fIsi_uid\fP ist die reale Benutzerkennung. Das Feld \fIsi_status\fP enthält den Exit\-Status des Kindes (falls \fIsi_code\fP \fBCLD_EXITED\fP ist) oder die Signalnummer, die den Prozess zur Zustandsänderung veranlasst hat. \fIsi_utime\fP und \fIsi_stime\fP enthalten die vom Kindprozess verwandte Benutzer\- und System\-CPU\-Zeit, diese Felder enthalten nicht die Zeit von Kindern, auf die gewartet wurde (anders als \fBgetrusage\fP(2) und \fBtimes\fP(2)). In Kerneln bis 2.6 und seit 2.6.27 berichten diese Felder die CPU\-Zeit in Einheiten von \fIsysconf(_SC_CLK_TCK)\fP. In 2.6er Kerneln vor 2.6.27 wurden durch einen Fehler diese Felder in Einheiten der (konfigurierbaren) System\-Jiffys berichtet (siehe \fBtime\fP(7)). .IP * \fBSIGILL\fP, \fBSIGFPE\fP, \fBSIGSEGV\fP, \fBSIGBUS\fP und \fBSIGTRAP\fP füllen in \fIsi_addr\fP die Adresse der Ausnahmebehandlung ein. Auf einigen Architekturen werden diese Signale auch in das Feld \fIsi_trapno\fP eingefüllt. .IP Einige Unterfehler von \fBSIGBUS\fP, insbesondere \fBBUS_MCEERR_AO\fP und \fBBUS_MCEERR_AR\fP, füllen auch \fIsi_addr_lsb\fP aus. Dieses Feld zeigt die niedrigste Bit der berichteten Adresse and und somit die größe der Beschädigung. Wurde beispielsweise eine ganze Seite beschädigt, enthält \fIsi_addr_lsb\fP contains \fIlog2(sysconf(_SC_PAGESIZE))\fP. Wenn \fBSIGTRAP\fP als Antwort auf ein \fBptrace\fP(2)\-Ereignis (PTRACE_EVENT_foo) geliefert wird, dann wird \fIsi_addr\fP nicht gefüllt, aber \fIsi_pid\fP und \fIsi_uid\fP werden mit der respektiven Prozesskennung und Benutzerkennung, die für das Ausliefern der Ausnahmebehandlung verantwortlich sind, gefüllt. Im Falle von \fBseccomp\fP(2) wird das nachverfolgte Programm (»Tracee«) als Auslieferer des Ereignisses angezeigt. \fBBUS_MCEERR_*\fP and \fIsi_addr_lsb\fP sind Linux\-spezifische Erweiterungen. .IP Der Unterfehler \fBSEGV_BNDERR\fP von \fBSIGSEGV\fP belegt \fIsi_lower\fP und \fIsi_upper\fP. .IP Der Unterfehler \fBSEGV_PKUERR\fP von \fBSIGSEGV\fP belegt \fIsi_pkey\fP. .IP * \fBSIGIO\fP/\fBSIGPOLL\fP (die zwei Namen sind unter Linux synonym) füllen \fIsi_band\fP und \fIsi_fd\fP aus. Das Ereignis \fIsi_band\fP ist eine Bitmaske, die die gleichen Werte enthält, die auch durch \fBpoll\fP(2) in das Feld \fIrevents\fP eingetragen werden. Das Feld \fIsi_fd\fP zeigt den Dateideskriptor an, für den ein E/A\-Ereignis aufgetreten ist. Für weitere Details lesen Sie die Beschreibung von \fBF_SETSIG\fP in \fBfcntl\fP(2). .IP * .\" commit a0727e8ce513fe6890416da960181ceb10fbfae6 .\" \fBSIGSYS\fP, erstellt (seit Linux 3.5) wenn ein Seccomp\-Filter \fBSECCOMP_RET_TRAP\fP zurückliefert, füllt \fIsi_call_addr\fP, \fIsi_syscall\fP, \fIsi_arch\fP, \fIsi_errno\fP und andere Felder wie in \fBseccomp\fP(2) beschrieben aus. .SS "Das Feld si_code" Das Feld \fIsi_code\fP innerhalb des an den Signal\-Handler \fBSA_SIGINFO\fP übergebenen Arguments \fIsiginfo_t\fP ist ein Wert (keine Bitmaske), der angibt, warum dieses Signal gesendet wurde. Für ein \fBptrace\fP(2)\-Ereignis wird \fIsi_code\fP \fBSIGTRAP\fP enthalten und das Ptrace\-Ereignis im hohen Byte enthalten. .PP .in +4n .EX (SIGTRAP | PTRACE_EVENT_foo << 8). .EE .in .PP Für ein Ereignis außerhalb von \fBptrace\fP(2) sind die Werte, die in \fIsi_code\fP erscheinen können, im Rest dieses Abschnittes beschrieben. Seit Glibc 2.20 werden die Definitionen der meisten dieser Symbole aus \fI\fP erhalten, indem Feature\-Test\-Makros (vor dem Einbinden \fIirgendeiner\fP Header\-Datei) wie folgt definiert werden: .IP * 3 \fB_XOPEN_SOURCE\fP mit dem Wert 500 oder größer; .IP * \fB_XOPEN_SOURCE\fP und \fB_XOPEN_SOURCE_EXTENDED\fP; oder .IP * \fB_POSIX_C_SOURCE\fP mit einem Wert 200809L oder größer. .PP Für die Konstanten \fBTRAP_*\fP 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. .PP Für ein reguläres Signal zeigt die folgende Liste die Werte, die in \fIsi_code\fP für jedes Signal gelegt werden können, zusammen mit dem Grund für die Erstellung des Signals. .RS 4 .TP \fBSI_USER\fP \fBkill\fP(2) .TP \fBSI_KERNEL\fP Vom Kernel geschickt .TP \fBSI_QUEUE\fP \fBsigqueue\fP(3) .TP \fBSI_TIMER\fP POSIX\-Timer ausgelaufen .TP \fBSI_MESGQ\fP (seit Linux 2.6.6) POSIX\-Nachrichtenwarteschlangenstatus geändert; siehe \fBmq_notify\fP(3). .TP \fBSI_ASYNCIO\fP AIO abgeschlossen .TP \fBSI_SIGIO\fP \fBSIGIO\fP in die Warteschlange eingereiht (nur in Kerneln bis Linux 2.2; seit Linux 2.4 füllt wie unten beschrieben \fBSIGIO\fP/\fBSIGPOLL\fP in \fIsi_code\fP). .TP \fBSI_TKILL\fP (seit Linux 2.4.19) .\" SI_DETHREAD is defined in 2.6.9 sources, but isn't implemented .\" It appears to have been an idea that was tried during 2.5.6 .\" through to 2.5.24 and then was backed out. \fBtkill\fP(2) oder \fBtgkill\fP(2) .RE .PP Die folgenden Werte können in \fIsi_code\fP für ein Signal \fBSIGILL\fP gesetzt werden: .RS 4 .TP \fBILL_ILLOPC\fP Ungültiger Opcode .TP \fBILL_ILLOPN\fP Ungültiger Operand .TP \fBILL_ILLADR\fP Ungültiger Adressierungsmodus .TP \fBILL_ILLTRP\fP Ungültige Ausnahmebehandlung. .TP \fBILL_PRVOPC\fP Privilegierter Opcode .TP \fBILL_PRVREG\fP Privilegiertes Register .TP \fBILL_COPROC\fP Koprozessorfehler .TP \fBILL_BADSTK\fP Interner Stack\-Fehler .RE .PP Die folgenden Werte können in \fIsi_code\fP für ein Signal \fBSIGFPE\fP gesetzt werden: .RS 4 .TP \fBFPE_INTDIV\fP Ganzzahldivision durch Null .TP \fBFPE_INTOVF\fP Ganzzahlüberlauf .TP \fBFPE_FLTDIV\fP Fließkommadivision durch Null .TP \fBFPE_FLTOVF\fP Fließkommazahlüberlauf .TP \fBFPE_FLTUND\fP Fließkommazahlunterlauf .TP \fBFPE_FLTRES\fP Ungenaues Fließkommaergebnis .TP \fBFPE_FLTINV\fP Ungültige Fließkommazahlaktion .TP \fBFPE_FLTSUB\fP Index außerhalb des Bereichs .RE .PP Die folgenden Werte können in \fIsi_code\fP für ein Signal \fBSIGSEGV\fP gesetzt werden: .RS 4 .TP \fBSEGV_MAPERR\fP Adresse ist keinem Objekt zugeordnet. .TP \fBSEGV_ACCERR\fP Ungültige Berechtigungen für zugeordnetes Objekt. .TP \fBSEGV_BNDERR\fP (seit Linux 3.19) .\" commit ee1b58d36aa1b5a79eaba11f5c3633c88231da83 Adressgrenzenprüfung fehlgeschlagen .TP \fBSEGV_PKUERR\fP (seit Linux 4.6) .\" commit cd0ea35ff5511cde299a61c21a95889b4a71464e Zugriff wurde durch Speicherschutzschlüssel verweigert. Siehe \fBpkeys\fP(7). Der auf diesen Zugriff passende Schutzschlüssel ist in \fIsi_pkey\fP verfügbar. .RE .PP Die folgenden Werte können in \fIsi_code\fP für ein Signal \fBSIGBUS\fP gesetzt werden: .RS 4 .TP \fBBUS_ADRALN\fP Ungültige Adressausrichtung. .TP \fBBUS_ADRERR\fP Nichtexistierende physische Adresse. .TP \fBBUS_OBJERR\fP Objektspezifischer Hardwarefehler. .TP \fBBUS_MCEERR_AR\fP (seit Linux 2.6.32) Hardware\-Speicherfehler wurde in einem Maschinen\-Check verarbeitet; Aktion notwendig. .TP \fBBUS_MCEERR_AO\fP (seit Linux 2.6.32) Hardwarespeicherfehler im Prozess erkannt aber nicht verwendet; Aktion optional. .RE .PP Die folgenden Werte können in \fIsi_code\fP für ein Signal \fBSIGTRAP\fP gesetzt werden: .RS 4 .TP \fBTRAP_BRKPT\fP Prozess\-Unterbrechungspunkt .TP \fBTRAP_TRACE\fP Prozessnachverfolgungsausnahmebehandlung. .TP \fBTRAP_BRANCH\fP (seit Linux 2.4, nur IA64) Prozess hat die Ausnahmebehandlung des Zweiges genommen. .TP \fBTRAP_HWBKPT\fP (seit Linux 2.4, nur IA64) Hardware\-Unterbrechungs\-/Überwachungspunkt. .RE .PP Die folgenden Werte können in \fIsi_code\fP für ein Signal \fBSIGCHLD\fP gesetzt werden: .RS 4 .TP \fBCLD_EXITED\fP Kind hat sich beendet. .TP \fBCLD_KILLED\fP Kind wurde getötet .TP \fBCLD_DUMPED\fP Kind wurde anormal beendet. .TP \fBCLD_TRAPPED\fP Das nachverfolgte Kind kam in eine Ausnahmebehandlung. .TP \fBCLD_STOPPED\fP Kind wurde gestoppt. .TP \fBCLD_CONTINUED\fP (seit Linux 2.6.9) Gestopptes Kind hat fortgefahren. .RE .PP Die folgenden Werte können in \fIsi_code\fP für ein Signal \fBSIGIO\fP\fBSIGPOLL\fP gesetzt werden: .RS 4 .TP \fBPOLL_IN\fP Dateneingabe verfügbar .TP \fBPOLL_OUT\fP Ausgabepuffer verfügbar .TP \fBPOLL_MSG\fP Eingabenachricht verfügbar .TP \fBPOLL_ERR\fP E/A\-Fehler (engl. I/O). .TP \fBPOLL_PRI\fP Eingabe hoher Priorität verfügbar .TP \fBPOLL_HUP\fP Gerät abgetrennt .RE .PP Die folgenden Werte können in \fIsi_code\fP für ein Signal \fBSIGSYS\fP gesetzt werden: .RS 4 .TP \fBSYS_SECCOMP\fP (seit Linux 3.5) Ausgelöst durch eine \fBseccomp\fP(2)\-Filterregel. .RE .SH RÜCKGABEWERT \fBsigaction\fP() gibt bei Erfolg Null zurück. Bei einem Fehler wird \-1 zurückgegeben und \fIerrno\fP entsprechend gesetzt. .SH FEHLER .TP \fBEFAULT\fP \fIakt\fP oder \fIaltakt\fP zeigt aus dem vom Prozess adressierbaren Adressraum heraus. .TP \fBEINVAL\fP Ein ungültiges Signal wurde angegeben. Dieser Fehler wird auch ausgelöst, wenn versucht wird, die Aktion für \fBSIGKILL\fP oder \fBSIGSTOP\fP zu ändern, da diese nicht abgefangen oder ignoriert werden können. .SH "KONFORM ZU" .\" SVr4 does not document the EINTR condition. POSIX.1\-2001, POSIX.1\-2008, SVr4. .SH ANMERKUNGEN Ein mittels \fBfork\fP(2) erstellter Kindprozess erbt eine Kopie der Signalzuordnungen seines Elternprozesses. Während eines \fBexecve\fP(2) werden die Zuordnungen von verwalteten Signalen auf die Vorgabe zurückgesetzt; die Zuordnung ignorierter Signale werden unverändert gelassen. .PP Laut POSIX ist das Verhalten eines Prozesses undefiniert, nachdem er ein Signal \fBSIGFPE\fP, \fBSIGILL\fP oder \fBSIGSEGV\fP ignoriert hat, das nicht von \fBkill\fP(2) oder \fBraise\fP(3) erstellt wurde. Ganzzahldivision durch Null hat ein undefiniertes Ergebnis. Auf einigen Architekturen wird dies ein Signal \fBSIGFPE\fP hervorrufen. (Auch kann die Division der größten negativen Ganzzahl durch \-1 \fBSIGFPE\fP hervorrufen.) Wird dieses Signal ignoriert, kann eine Endlosschleife auftreten. .PP POSIX.1\-1990 verbot das Setzen der Aktion für \fBSIGCHLD\fP bis \fBSIG_IGN\fP. POSIX.1\-2001 und neuer erlauben diese Möglichkeit, so dass das Ignorieren von \fBSIGCHLD\fP zur Vermeidung von Zombies verwandt werden kann (siehe \fBwait\fP(2)). Allerdings unterscheiden sich die historischen BSD\- und System\-V\-Verhalten für das Ignorieren von \fBSIGCHLD\fP, so dass die einzige komplett portable Methode, um sicherzustellen, dass beendete Kinder nicht Zombies werden, das Fangen des Signals \fBSIGCHLD\fP und das Durchführen eines \fBwait\fP(2) oder ähnlichem ist. .PP POSIX.1\-1990 spezifizierte nur \fBSA_NOCLDSTOP\fP. POSIX.1\-2001 fügte \fBSA_NOCLDSTOP\fP, \fBSA_NOCLDWAIT\fP, \fBSA_NODEFER\fP, \fBSA_ONSTACK\fP, \fBSA_RESETHAND\fP, \fBSA_RESTART\fP und \fBSA_SIGINFO\fP hinzu. Benutzung letzterer Werte in \fIsa_flags\fP könnte in Anwendungen, die für ältere UNIX\-Implementierungen gedacht sind, weniger portabel sein. .PP Der Schalter \fBSA_RESETHAND\fP ist zu dem SVr4\-Schalter mit dem gleichen Namen kompatibel. .PP Der Schalter \fBSA_NODEFER\fP 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 \fIsa_mask\fP außer Kraft setzt). .PP Wird \fBsigaction\fP 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. .PP Es ist nicht möglich, \fBSIGKILL\fP oder \fBSIGSTOP\fP zu blockieren (indem sie in \fIsa_mask\fP festgelegt werden). Derartige Versuche werden ohne Rückmeldung ignoriert. .PP Siehe \fBsigsetops\fP(3) für Details über das Bearbeiten von Signalgruppen. .PP .\" Siehe \fBsignal\-safety\fP(7) für eine Liste der asynchron\-signalsicheren Funktionen, die sicher innerhalb eines Signal\-Handlers aufgerufen werden können. .SS "Unterschiede C\-Bibliothek/Kernel" Die Glibc\-Wrapper\-Funktion für \fBsigaction\fP() liefert bei Versuchen, die Zuordnung der zwei intern durch die NPTL\-Threading\-Implementierung verwandten Echtzeitsignale zu ändern, einen Fehler zurück. Siehe \fBnptl\fP(7) für Details. .PP Auf Architekturen, bei denen das Signal\-Trampolin innerhalb der C\-Bibliothek liegt, setzt die Glibc\-Wrapper\-Funktion für \fBsigaction\fP() die Adresse des Trampolin\-Codes in das Feld \fIact.sa_restorer\fP und \fBSA_RESTORER\fP in das Feld \fIact.sa_flags\fP. Siehe \fBsigreturn\fP(2). .PP .\" Der ursprüngliche Linux\-Systemaufruf hieß \fBsigaction\fP(). Mit dem Hinzufügen von Echtzeitsignalen in Linux 2.2 passte der mit einer festen Größe versehene 32\-Bit\-Typ \fIsigset_t\fP nicht mehr für den Zweck. Daher wurde ein neuer Systemaufruf \fBrt_sigaction\fP() mit einem vergrößerten Typ \fIsigset_t\fP hinzugefügt. Der neue Systemaufruf akzeptiert ein viertes Argument \fIsize_t sigsetsize\fP, das die Größe in Bytes der Signalgruppe in \fIact.sa_mask\fP und \fIoldact.sa_mask\fP festlegt. Dieses Argument muss derzeit den Wert \fIsizeof(sigset_t)\fP enthalten oder der Fehler \fBEINVAL\fP tritt auf. Die Glibc\-Wrapper\-Funktion \fBsigaction\fP() versteckt diese Details und ruft \fBrt_sigaction\fP() transparent auf, wenn der Kernel ihn bereitstellt. .SS Undokumentiert Vor der Einführung von \fBSA_SIGINFO\fP war es auch möglich, einige zusätzliche Informationen über das Signal zu erhalten. Dies erfolgte durch Bereitstellung eines \fIsa_handler\fP\-Signal\-Handlers mit einem zweiten Argument des Typs \fIstruct sigcontext\fP, das die gleiche Struktur ist, wie jene, die im Feld \fIuc_mcontext\fP der Struktur \fIucontext\fP übergeben wird, die wiederum (mittels eines Zeigers) als drittes Argument des Handlers \fIsa_sigaction\fP übergeben wird. Siehe die relevanten Kernelquellen für Details. Diese Verwendung ist jetzt veraltet. .SH FEHLER Wird ein Signal mit einem \fBSA_SIGINFO\fP\-Handler ausgeliefert, stellt der Kernel nicht immer aussagekräftige Werte für alle Felder von \fIsiginfo_t\fP, die relevant für dieses Signal sind, bereit. .PP .\" commit 69be8f189653cd81aae5a74e26615b12871bb72e In Kerneln bis einschließlich 2.6.13 verhinderte die Festlegung von \fBSA_NODEFER\fP in \fIsa_flags\fP nicht nur die Ausblendung des ausgelieferten Signals während der Ausführung des Handlers sondern auch der in \fIsa_mask\fP festgelegten Signale. Dieser Fehler wurde in Kernel 2.6.14 behoben. .SH BEISPIELE Siehe \fBmprotect\fP(2) .SH "SIEHE AUCH" \fBkill\fP(1), \fBkill\fP(2), \fBpause\fP(2), \fBpidfd_send_signal\fP(2), \fBrestart_syscall\fP(2), \fBseccomp\fP(2), \fBsigaltstack\fP(2), \fBsignal\fP(2), \fBsignalfd\fP(2), \fBsigpending\fP(2), \fBsigprocmask\fP(2), \fBsigreturn\fP(2), \fBsigsuspend\fP(2), \fBwait\fP(2), \fBkillpg\fP(3), \fBraise\fP(3), \fBsiginterrupt\fP(3), \fBsigqueue\fP(3), \fBsigsetops\fP(3), \fBsigvec\fP(3), \fBcore\fP(5), \fBsignal\fP(7) .SH KOLOPHON Diese Seite ist Teil der Veröffentlichung 5.10 des Projekts Linux\-\fIman\-pages\fP. 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/. .PP .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von René Tschirley , Martin Eberhard Schauer und Helge Kreutzmann erstellt. .PP Diese Übersetzung ist Freie Dokumentation; lesen Sie die .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. .PP Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die .MT debian-l10n-german@lists.debian.org Mailingliste der Übersetzer .ME .