.\" -*- coding: UTF-8 -*- '\" t .\" 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 "15. September 2017" 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\fIact\fP\fB,\fP \fB struct sigaction *\fP\fIoldact\fP\fB);\fP .fi .PP .in -4n Mit Glibc erforderliche Makros (siehe \fBfeature_test_macros\fP(7)): .in .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 \fIact\fP nicht NULL ist, wird die neue Aktion für Signal \fIsignum\fP aus \fIact\fP installiert. Falls \fIoldact\fP nicht Null ist, wird die vorherige Aktion in \fIoldact\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 legt die \fIsignum\fP zugeordnete Funktion fest; sie könnte \fBSIG_DFL\fP als Vorgabeaktion sein, \fBSIG_IGN\fP, um dieses Signal zu ignorieren oder ein Zeiger auf eine Signalhandhabungsfunktion. Diese Funktion erhält die Signalnummer als 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: .RS 4 .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 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. \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. \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. .RE .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) 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; /* 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 \fIint\fP 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) */ } .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, and \fBSIGTRAP\fP fill in \fIsi_addr\fP with the address of the fault. On some architectures, these signals also fill in the \fIsi_trapno\fP field. .IP Some suberrors of \fBSIGBUS\fP, in particular \fBBUS_MCEERR_AO\fP and \fBBUS_MCEERR_AR\fP, also fill in \fIsi_addr_lsb\fP. 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, \fIsi_addr_lsb\fP contains \fIlog2(sysconf(_SC_PAGESIZE))\fP. When \fBSIGTRAP\fP is delivered in response to a \fBptrace\fP(2) event (PTRACE_EVENT_foo), \fIsi_addr\fP is not populated, but \fIsi_pid\fP and \fIsi_uid\fP are populated with the respective process ID and user ID responsible for delivering the trap. In the case of \fBseccomp\fP(2), the tracee will be shown as delivering the event. \fBBUS_MCEERR_*\fP and \fIsi_addr_lsb\fP are Linux\-specific extensions. .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 Illegal trap. .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 Address not mapped to object. .TP \fBSEGV_ACCERR\fP Invalid permissions for mapped object. .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 memory error consumed on a machine check; action required. .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 Process trace trap. .TP \fBTRAP_BRANCH\fP (seit Linux 2.4, IA64 only)) Process taken branch trap. .TP \fBTRAP_HWBKPT\fP (seit Linux 2.4, IA64 only)) 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 Traced child has trapped. .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 \fIact\fP oder \fIoldact\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) erstelltes Kind 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 detaillierte Informationen über die Manipulation 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 durch die Verwendung eines \fIsa_handler\fP mit einem zweiten Argument des Typs \fIstruct sigcontext\fP zu erhalten. Siehe die relevanten Kernelquellen für Details. Diese Verwendung ist jetzt veraltet. .SH FEHLER 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 BEISPIEL Siehe \fBmprotect\fP(2) .SH "SIEHE AUCH" \fBkill\fP(1), \fBkill\fP(2), \fBpause\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 4.16 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/. .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von René Tschirley , Martin Eberhard Schauer und Helge Kreutzmann 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 .