.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2000 Andries Brouwer .\" and Copyright (c) 2007 Michael Kerrisk .\" and Copyright (c) 2008, Linux Foundation, written by Michael Kerrisk .\" .\" based on work by Rik Faith .\" and Mike Battersby . .\" .\" %%%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 2004-11-19, mtk: .\" added pointer to sigaction.2 for details of ignoring SIGCHLD .\" 2007-06-03, mtk: strengthened portability warning, and rewrote .\" various sections. .\" 2008-07-11, mtk: rewrote and expanded portability discussion. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH SIGNAL 2 "15. September 2017" Linux Linux\-Programmierhandbuch .SH BEZEICHNUNG signal \- Handhabung von Signalen in ANSI C .SH ÜBERSICHT \fB#include \fP .PP \fBtypedef void (*sighandler_t)(int);\fP .PP \fBsighandler_t signal(int \fP\fIsignum\fP\fB, sighandler_t \fP\fIhandler\fP\fB);\fP .SH BESCHREIBUNG Das Verhalten von \fBsignal\fP() unterscheidet sich zwischen UNIX\-Versionen und hat sich historisch auch zwischen verschiedenen Linux\-Versionen geändert. \fBVermeiden Sie den Einsatz dieser Funktion\fP und verwenden Sie stattdessen \fBsigaction\fP(2); siehe \fIPortabilität\fP weiter unten. .PP \fBsignal\fP() ordnet dem Signal \fIsignum\fP den \fIhandler\fP zu. Das ist entweder \fBSIG_IGN\fP, \fBSIG_DFL\fP oder die Adresse einer vom Programmierer definierten Funktion (eines »Signal Handlers«). .PP Falls dem Prozess das Signal \fIsignum\fP zugestellt wird, wird einer der folgenden Fälle eintreten: .TP 3 * Falls \fBSIG_IGN\fP zugeordnet wurde, wird das Signal ignoriert. .TP * Falls \fBSIG_DFL\fP zugeordnet wurde, wird die standardmäßig dem Signal zugewiesene Aktion ausgeführt, wenn das Signal eintrift (siehe \fBsignal\fP(7)). .TP * Falls eine Funktion zugeordnet wurde, dann wird zuerst entweder die Zuweisung auf \fBSIG_DFL\fP zurückgesetzt oder das Signal wird blockiert (siehe \fIPortability\fP unten) und anschließend \fIhandler\fP mit dem Argument \fIsignum\fP aufgerufen. Falls der Aufruf des Handlers ein Blockieren des Signals verursachte, wird die Blockade nach der Rückkehr aus dem Handler aufgehoben. .PP Die Signale \fBSIGKILL\fP und \fBSIGSTOP\fP können nicht abgefangen oder ignoriert werden. .SH RÜCKGABEWERT \fBsignal\fP() liefert den vorherigen Signal Handler zurück oder im Fehlerfall \fBSIG_ERR\fP. Im Fehlerfall wird \fIerrno\fP gesetzt, um den Grund anzugeben. .SH FEHLER .TP \fBEINVAL\fP \fIsignum\fP ist ungültig. .SH "KONFORM ZU" POSIX.1\-2001, POSIX.1\-2008, C89, C99. .SH ANMERKUNGEN Die Auswirkungen von \fBsignal\fP() in einem Multithread\-Prozess sind nicht spezifiziert. .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 Siehe \fBsigaction\fP(2) für Einzelheiten des Geschehens, wenn die Zuordnung \fBSIGCHLD\fP auf \fBSIG_IGN\fP gesetzt wird. .PP Siehe \fBsignal\-safety\fP(7) für eine Liste von Funktionen, die sicher mit asynchronen Signalen umgehen können und daher sicher aus einem Signal Handler heraus aufgerufen werden können. .PP .\" libc4 and libc5 define .\" .IR SignalHandler ; Die Verwendung von \fIsighandler_t\fP ist eine GNU\-Erweiterung, die durch die Definition von \fB_GNU_SOURCE\fP verfügbar wird; Glibc definiert zusätzlich (das von BSD abgeleitete) \fIsig_t\fP, wenn \fB_BSD_SOURCE\fP (Glibc 2.19 und älter) oder \fB_DEFAULT_SOURCE\fP (Glibc 2.19 und neuer) definiert wird. Ohne die Nutzung eines solches Typs ist die Deklaration von \fBsignal\fP() etwas schwerer zu lesen: .PP .in +4n .EX \fBvoid ( *\fP\fIsignal\fP\fB(int \fP\fIsignum\fP\fB, void (*\fP\fIhandler\fP\fB)(int)) ) (int);\fP .EE .in .SS Portabilität Die einzige portable Verwendung von \fBsignal\fP() ist die Zuordnung von \fBSIG_DFL\fP oder \fBSIG_IGN\fP zu einem Signal. Die Semantik bei der Einrichtung eines Signal Handlers mittels \fBsignal\fP() unterscheidet sich zwischen Systemen (und POSIX.1 erlaubt diese Unterschiede explizit); \fBverwenden Sie die Funktion nicht für diesen Zweck\fP. .PP POSIX.1 löste das Portabilitätschaos durch die Beschreibung von \fBsigaction\fP(2), die eine explizite Kontrolle der Semantik beim Aufruf eines Signal\-Handlers ermöglicht; verwenden Sie diese Schnittstelle anstatt von \fBsignal\fP(). .PP In den ursprünglichen UNIX\-Systemen wurde beim Aufruf eines mittels \fBsignal\fP() zugeordneten Handlers die Signalbearbeitung wieder auf \fBSIG_DFL\fP zurückgesetzt und das System blockierte weitere Instanzen des Signals nicht mehr. Dies ist äquivalent zum Aufruf von \fBsigaction\fP(2) mit den folgenden Schaltern: .PP .EX sa.sa_flags = SA_RESETHAND | SA_NODEFER; .EE .PP Auch System V bietet diese Semantik für \fBsignal\fP(). Das war schlecht, weil das Signal wieder eintreffen konnte, bevor der Signal Handler Gelegenheit hatte, sich erneut einzurichten. Darüber hinaus konnten schnell aufeinander folgende Zustellungen des gleichen Signals zu rekursiven Aufrufen des Handlers führen. .PP BSD verbesserte die Situation, änderte aber unglücklicherweise dabei auch die Semantik der bestehenden \fBsignal\fP()\-Schnittstelle. Unter BSD wird beim Aufruf eines Signal\-Handlers dieser für das Signal beibehalten und die Zustellung weiterer Instanzen des Signals wird blockiert, solange der Handler noch läuft. Desweiteren werden bestimmte blockierende Systemaufrufe automatisch neu gestartet, falls sie durch einen Signal\-Handler (siehe \fBsignal\fP(7)) unterbrochen wurden. Die BSD\-Semantik ist äquivalent zum Aufruf von \fBsigaction\fP(2) mit den folgenden Schaltern: .PP .EX sa.sa_flags = SA_RESTART; .EE .PP Die Situation unter Linux ist wie folgt: .IP * 2 Das \fBsignal\fP()\-System des Kernels stellt System\-V\-Semantik bereit. .IP * .\" .\" System V semantics are also provided if one uses the separate .\" .BR sysv_signal (3) .\" function. .\" .IP * .\" The .\" .BR signal () .\" function in Linux libc4 and libc5 provide System\ V semantics. .\" If one on a libc5 system includes .\" .I .\" instead of .\" .IR , .\" then .\" .BR signal () .\" provides BSD semantics. Standardmäßig nutzt in Glibc 2 und neuer die \fBsignal\fP()\-Wrapper\-Funktion nicht den Kernel\-Systemaufruf. Stattdessen ruft sie \fBsigaction\fP (2) mit Schaltern auf, welche BSD\-Semantik bereitstellen. Dieses Standardverhalten wird so lange bereitgestellt, solange ein geeignetes Feature\-Test\-Makro definiert ist: \fB_BSD_SOURCE\fP unter Glibc 2.19 und älter oder \fB_DEFAULT_SOURCE\fP unter Glibc 2.19 und neuer. (Standardmäßig werden diese Makros definiert; siehe \fBfeature_test_macros\fP(7) für Details.) Falls ein solches Feature\-Test\-Makro nicht definiert ist, wird \fBsignal\fP() die System\-V\-Semantik bereitstellen. .SH "SIEHE AUCH" \fBkill\fP(1), \fBalarm\fP(2), \fBkill\fP(2), \fBpause\fP(2), \fBsigaction\fP(2), \fBsignalfd\fP(2), \fBsigpending\fP(2), \fBsigprocmask\fP(2), \fBsigsuspend\fP(2), \fBbsd_signal\fP(3), \fBkillpg\fP(3), \fBraise\fP(3), \fBsiginterrupt\fP(3), \fBsigqueue\fP(3), \fBsigsetops\fP(3), \fBsigvec\fP(3), \fBsysv_signal\fP(3), \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 Schulze , Martin Eberhard Schauer und Mario Blättermann 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 .