Provided by: manpages-de_1.11-1_all 

BEZEICHNUNG
signal - Überblick über Signale (Software-Interrupts)
BESCHREIBUNG
Linux unterstützt sowohl nach POSIX zuverlässige Signale (im Folgenden: »Standard-Signale«) und
POSIX-Echtzeit-Signale.
Signal-Wirkungen (disposition)
Jedes Signal hat eine aktuelle Wirkung. Sie legt fest, wie sich der Prozess verhält, wenn er das Signal
erhält.
Die Einträge in der »Aktion«-Spalte in den folgenden Tabellen legen die Standardwirkung für jedes Signal
fest:
Term Standardaktion ist der Abbruch des Prozesses.
Ign Standardaktion ist, das Signal zu ignorieren.
Core Die Standardaktion ist der Abbruch des Prozesses und das Erstellen eines Speicherauszugs (siehe
core(5)).
Stop Die Standardaktion ist, den Prozess anzuhalten.
Cont Die Standardaktion ist, einen angehaltenen Prozess fortzusetzen.
Ein Prozess kann die Wirkung eines Signals mit Hilfe von sigaction(2) oder signal(2) ändern. (Letzteres
ist schlechter portierbar bei der Realisierung von Signal-Handlern; siehe signal(2) für Details.) Mit
diesen Systemaufrufen kann ein Prozess eine der folgenden Verhaltensweisen bei Erhalt eines Signals
festlegen: die Standardaktion ausführen, das Signal ignorieren oder das Signal mit einem Signal-Handler
abfangen. Ein Signal-Handler ist eine vom Programmierer definierte Funktion. Sie wird automatisch
aufgerufen, wenn das Signal eintrifft. (Standardmäßig wird der Signal-Handler auf dem normalen
Prozess-Stack aufgerufen. Man kann es einrichten, dass der Signal-Handler einen alternativen Stack
benutzt; vgl. sigaltstack(2) für eine Erörterung, wie das gemacht wird und wann es nützlich sein könnte).
Die Reaktion auf das Signal ist ein Merkmal des ganzen Prozesses; in einer Multithread-Anwendung wirkt
das Signal auf alle Threads gleich.
Ein mittels fork(2) erzeugter Kindprozess reagiert auf ein Signal wie der Prozess, der ihn erzeugte.
Während eines execve(2) werden die Reaktionen auf behandelte Signale auf die Standardwerte zurückgesetzt,
die Reaktion auf ignorierte Signale bleibt unverändert.
Ein Signal senden
Die folgenden Systemaufrufe und Bibliotheksfunktionen ermöglichen dem aufrufenden Programm den Versand
eines Signals:
raise(3) sendet dem aufrufenden Thread ein Signal
kill(2) sendet ein Signal an einen bestimmten Prozess, alle Mitglieder einer bestimmten
Prozessgruppe oder an alle Prozesse im System
killpg(2) sendet ein Signal an alle Mitglieder einer bestimmten Prozessgruppe
pthread_kill(3) sendet ein Signal an einen bestimmten POSIX-Thread im gleichen Prozess wie die aufrufende
Routine
tgkill(2) Es wird ein Signal an einen bestimmten Thread in einem bestimmten Prozess gesendet. (Mit
diesem Systemaufruf wird pthread_kill(3) realisiert.)
sigqueue(3) sendet ein Echtzeit-Signal und zugehörige Daten an einen bestimmten Prozess
Warten auf ein abzufangendes Signal
Die folgenden Systemaufrufe setzen die Ausführung des aufrufenden Prozesses oder Threads aus, bis ein
Signal abgefangen wird (oder ein nicht abgefangenes Signal den Prozess beendet):
pause(2) setzt die Ausführung aus, bis irgendein Signal abgefangen wird.
sigsuspend(2) ändert zeitweise die Signalmaske (siehe unten) und setzt die Ausführung aus, bis eines
der nicht maskierten Signale abgefangen wird.
Synchrone Signalannahme
Anstatt ein Signal asynchron mit einem Signal-Handler abzufangen, kann ein Signal auch synchron
akzeptiert werden. Das heißt, die Ausführung wird blockiert, bis das Signal gesendet wird. Dann liefert
der Kernel Informationen über das Signal an den Aufrufenden. Es gibt zwei allgemeine Möglichkeiten, das
zu tun:
* sigwaitinfo(2), sigtimedwait(2) und sigwait(3) setzen die Ausführung aus, bis ein Signal gesendet wird,
dass zu einer festgelegen Gruppe von Signalen gehört. Jeder dieser Aufrufe gibt Informationen über das
empfangene Signal zurück.
* signalfd(2) gibt einen Dateideskriptor zurück. Mit ihm können Informationen über Signale gelesen
werden, die dem Aufrufenden übermittelt werden. Jeder Aufruf von read(2) aus dieser Datei wird
blockiert, bis eines der Signale aus der im Aufruf von signalfd(2) festgelegten Menge an den
aufrufenden Prozess gesendet wird. Der von read(2) zurückgegebene Puffer enthält eine Struktur, die das
Signal beschreibt.
Signalmaske und anstehende Signale
Ein Signal kann blockiert werden. Das bedeutet, dass es erst dann gesendet wird, nachdem es
(später/verzögert) freigegeben wurde. Zwischen dem Zeitpunkt seiner Erzeugung und dem Zeitpunkt seines
Versands wird es anstehend (pending) genannt.
Jeder Thread in einem Prozess hat eine unabhängige Signalauswahl-Maske (signal mask). Sie legt den Satz
von Signalen fest, den der Thread derzeit blockiert. Ein Thread kann seine Signalauswahl-Maske mit
pthread_sigmask(3) manipulieren. In einer traditionellen Single-Threaded-Anwendung kann sigprocmask(2)
verwendet werden, um die Signalmaske zu manipulieren.
Ein mittels fork(2) erstellter Kindprozess erbt eine Kopie der Signalauswahl-Maske des Elternprozesses;
sie bleibt über einen Aufruf von execve(2) erhalten.
Ein Signal kann für einen Prozess als Ganzes oder für einen bestimmten Thread erzeugt werden (und damit
anstehen). Ein Beispiel für den ersten Fall ist die Verwendung von kill(2). Beispiele für den zweiten
Fall sind bestimmte Signale wie SIGSEGV und SIGFPE, die als Folge der Ausführung einer bestimmten
Maschinensprachen-Anweisung erzeugt werden und somit threadgerichtet sind sowie Routinen wie
pthread_kill(3), die Signale an einen bestimmten Thread senden. Ein an einen Prozess gerichtetes Signal
kann an jeden Thread, der derzeit das Signal nicht blockiert hat, gesendet werden. Wenn mehr als einer
der Threads das Signal nicht blockiert hat, wählt der Kernel einen beliebigen Thread, an den das Signal
gesendet wird.
Ein Thread kann die aktuell für ihn anstehenden Signale mit sigpending(2) ermitteln. Das sind einerseits
die für diesen Thread und andererseits die für seinen Prozess bestimmten Signale.
Ein mittels fork(2) erzeugter Kindprozess hat anfangs keine anstehenden Signale; anstehende Signale
bleiben über execve(2) erhalten.
Standard-Signale
Linux unterstützt die unten aufgeführten Standard-Signale. Mehrere Signalnummern sind
architekturabhängig, was in der »Wert«-Spalte angegeben wird. (Wo drei Werte angegeben sind, gilt der
erste Wert in der Regel für Alpha und SPARC, der mittlere für x86, arm und die meisten anderen
Architekturen und der letzte für MIPS. (Die Werte für PARISC sind nicht dargestellt; lesen Sie die
Linux-Kernelquellen für die Signalnummerierung auf dieser Architektur.) Ein - bedeutet, dass ein Signal
in der entsprechenden Architektur nicht vorhanden ist.
Zuerst die im ursprünglichen POSIX.1-1990-Standard beschriebenen Signale:
Signal Wert Action Kommentar
────────────────────────────────────────────────────────────────────────
SIGHUP 1 Term Verbindung am steuernden Terminal beendet
or death of controlling process
SIGINT 2 Term Unterbrechung von der Tastatur
SIGQUIT 3 Core Quit from keyboard
SIGILL 4 Core ungültiger Befehl
SIGABRT 6 Core Abbruchsignal von abort(3)
SIGFPE 8 Core Fließkomma-Ausnahmefehler
SIGKILL 9 Term Kill signal
SIGSEGV 11 Core ungültige Speicherreferenz
SIGPIPE 13 Term defekte Pipe: Schreiben in eine Pipeline
ohne Leser
SIGALRM 14 Term Zeitsignal von alarm(2)
SIGTERM 15 Term Beendigungssignal (termination signal)
SIGUSR1 30,10,16 Term benutzerdefiniertes Signal 1
SIGUSR2 31,12,17 Term benutzerdefiniertes Signal 2
SIGCHLD 20,17,18 Ign Kindprozess angehalten oder beendet
SIGCONT 19,18,25 Cont fortsetzen, wenn angehalten
SIGSTOP 17,19,23 Stop Stop process
SIGTSTP 18,20,24 Stop Stop am Terminal eingegeben
SIGTTIN 21,21,26 Stop Terminal-Eingabe für Hintergrundprozess
SIGTTOU 22,22,27 Stop Terminal-Ausgabe für Hintergrundprozess
Die Signale SIGKILL und SIGSTOP können nicht abgefangen, blockiert oder ignoriert werden.
Als nächstes die Signale, die nicht in POSIX.1-1990, aber in SUSv2 und POSIX.1-2001 beschrieben sind.
Signal Wert Action Kommentar
─────────────────────────────────────────────────────────────────────────────
SIGBUS 10,7,10 Core Bus-Fehler (Speicherzugriffsfehler)
SIGPOLL Term abfragbares Ereignis (Sys V),
Synonym für SIGIO
SIGPROF 27,27,29 Term Profiling timer expired
SIGSYS 12,31,12 Core falsches Argument für Routine (SVr4)
SIGTRAP 5 Core Trace/breakpoint trap
SIGURG 16,23,21 Ign Urgent condition on socket (4.2BSD)
SIGVTALRM 26,26,28 Term virtueller Wecker (4.2BSD)
SIGXCPU 24,24,30 Core CPU-Zeitbegrenzung überschritten (4.2BSD)
SIGXFSZ 25,25,31 Core Dateigrößenbegrenzung überschritten (4.2BSD)
Bis einschließlich Linux 2.2 war das Standardverhalten für SIGSYS, SIGXCPU, SIGXFSZ und (auf anderen
Architekturen als SPARC und MIPS) SIGBUS den Prozess (ohne einen Speicherauszug zu erzeugen) zu beenden.
(Auf einigen anderen UNIX-Systemen ist die Standardaktion für SIGXCPUund SIGXFSZ, den Prozess ohne einen
Speicherauszug zu beenden.) Linux 2.4 entspricht den Anforderungen von POSIX.1-2001 an diese Signale und
beendet den Prozess mit einem Speicherauszug.
Es folgen diverse weitere Signale.
Signal Wert Action Kommentar
────────────────────────────────────────────────────────────────────
SIGIOT 6 Core IOT trap. A synonym for SIGABRT
SIGEMT 7,-,7 Term
SIGSTKFLT -,16,- Term Stack fault on coprocessor (unused)
SIGIO 23,29,22 Term E/A jetzt möglich (4.2BSD)
SIGCLD -,-,18 Ign ein Synonym für SIGCHLD
SIGPWR 29,30,19 Term Stromausfall (System V)
SIGINFO 29,-,- ein Synonym für SIGPWR
SIGLOST -,-,- Term File lock lost (unused)
SIGWINCH 28,28,20 Ign Window resize signal (4.3BSD, Sun)
SIGUNUSED -,31,- Core synonym mit SIGSYS
(Signal 29 ist SIGINFO / SIGPWR auf einer Alpha-Maschine, aber SIGLOST auf einer Sparc.)
SIGEMT ist nicht in POSIX.1-2001 angegeben, erscheint aber trotzdem auf den meisten anderen
UNIX-Systemen. Dort ist die Standardaktion in der Regel die Beendigung des Prozesses mit einem
Speicherauszug.
SIGPWR (nicht in POSIX.1-2001 beschrieben) wird bei seinem Eintreten von diesen anderen UNIX-Systemen
ignoriert.
SIGIO (nicht in POSIX.1-2001 beschrieben) wird standardmäßig auf verschiedenen anderen UNIX-Systemen
ignoriert.
Wenn das Signal definiert ist, ist auf den meisten Architekturen SIGUNUSED synonym zu SIGSYS.
Echtzeit-Signale
Beginnend mit Version 2.2 unterstützt Linux Echtzeit-Signale, wie sie ursprünglich in den
POSIX.1b-Echtzeit-Erweiterungen definiert wurden (und jetzt in POSIX.1-2001 enthalten sind). Die Bereich
der unterstützten Echtzeit-Signale wird von den Makros SIGRTMIN und SIGRTMAX definiert. POSIX.1-2001
verlangt, dass eine Umsetzung mindestens _POSIX_RTSIG_MAX (8) Echtzeit-Signale unterstützt.
Der Linux-Kernel unterstützt eine Reihe von 33 verschiedenen Echtzeit-Signalen, nummeriert von 32 bis 64.
Doch die Glibc-Umsetzung der POSIX-Threads verwendet intern zwei (für NPTL) oder drei (für LinuxThreads)
Echtzeit-Signale (siehe pthreads (7)) und stellt den Wert von SIGRTMIN passend (auf 34 oder 35 ein). Da
die Zahl der verfügbaren Echtzeit-Signale je nach Glibc-Threading-Implementierung variiert und diese
Variation (entsprechend dem verfügbaren Kernel und der Glibc) zur Laufzeit auftreten kann und tatsächlich
die verfügbaren Echtzeitsignale je nach UNIX-System variieren, sollten Programme niemals mit eincodierten
Zahlen auf Echtzeit-Signale verweisen. Stattdessen sollte auf Echtzeit-Signale immer mit der Notation
SIGRTMIN+n verwiesen werden und zur Laufzeit überprüft werden, ob (SIGRTMIN+n) SIGRTMAX nicht übersteigt.
Im Gegensatz zu Standardsignalen haben Echtzeit-Signale keine vordefinierten Bedeutungen: der gesamte
Satz von Echtzeit-Signalen kann für anwendungsspezifische Zwecke genutzt werden.
Die Standardaktion für ein nicht abgefangenes Echtzeit-Signal ist der Abbruch des Prozesses.
Echtzeit-Signale zeichnen sich durch folgende Merkmale aus:
1. Von Echtzeit-Signalen können mehrere Instanzen anstehen. Im Gegensatz dazu wird beim Versand mehrerer
Instanzen eines Standard-Signals, während das Signal aktuell blockiert ist, nur eine Instanz weiter
anstehen.
2. Wenn das Signal mit Hilfe von sigqueue(3) gesendet wird, kann mit ihm ein begleitender Wert (entweder
eine Ganzzahl (Integer) oder ein Zeiger) gesendet werden. Wenn der empfangende Prozess mittels des
SA_SIGINFO-Schalters für sigaction(2) einen Handler für dieses Signal implementiert, kann dieser Wert
aus dem si_value-Feld der siginfo_t-Struktur (das zweite Argument des Handlers) bestimmt werden.
Darüber hinaus können die Felder si_uid und si_pid dieser Struktur verwendet werden, um die
Prozess-ID und reale Benutzer-ID des Prozesses zu erhalten, der das Signal erzeugt hat.
3. Echtzeit-Signale werden in einer garantierten Reihenfolge zugestellt. Mehrere Echtzeit-Signale des
gleichen Typs werden in der Reihenfolge zugestellt, in der sie gesendet wurden. Wenn verschiedene
Echtzeit-Signale an einen Prozess geschickt werden, wird das Signal mit der niedrigsten Signalnummer
zuerst zugestellt. (D.h. niedrig nummerierte Signale haben höchste Priorität.) Im Gegensatz dazu ist
die Reihenfolge der Zustellung mehrerer für einen Prozess anstehender Standard-Signale nicht
festgelegt.
Wenn sowohl Standard- als auch Echtzeit-Signale für einen Prozess anstehen, macht POSIX keine Angabe
dazu, welche Signale zuerst zugestellt werden. Linux gibt wie auch viele andere Implementierungen den
Standard-Signalen den Vorzug.
Nach POSIX sollte eine Umsetzung mindestens _POSIX_SIGQUEUE_MAX (32) Echtzeit-Signale in der
Warteschlange eines Prozesses ermöglichen. Allerdings macht Linux das anders. Im Kernel bis
einschließlich 2.6.7 legt Linux eine systemweite Obergrenze für die Anzahl wartender Echtzeit-Signale für
alle Prozesse fest. Diese Grenze kann eingesehen und (mit entsprechenden Rechten) durch die Datei
/proc/sys/kernel/rtsig-max geändert werden. Aus der verwandten Datei /proc/sys/kernel/rtsig-nr kann die
Anzahl der aktuell anstehenden Signale ermittelt werden. In Linux 2.6.8 wurden diese /proc-Schnittstellen
durch die Ressource RLIMIT_SIGPENDING, die einen benutzerspezifischen Grenzwert für anstehende Signale in
der Warteschlange festlegt, ersetzt (siehe setrlimit(2)).
The addition or real-time signals required the widening of the signal set structure (sigset_t) from 32
to 64 bits. Consequently, various system calls were superseded by new system calls that supported the
larger signal sets. The old and new system calls are as follows:
Linux 2.0 und älter Linux 2.2 und neuer
sigaction(2) rt_sigaction(2)
sigpending(2) rt_sigpending(2)
sigprocmask(2) rt_sigprocmask(2)
sigreturn(2) rt_sigreturn(2)
sigsuspend(2) rt_sigsuspend(2)
sigtimedwait(2) rt_sigtimedwait(2)
Asynchrone, signalsichere Funktionen
Eine Signal-Handler-Funktion muss sehr sorgfältig programmiert werden, weil die Verarbeitung an einer
beliebigen Stelle unterbrochen werden kann. POSIX hat das Konzept der »sicheren Funktion«. Wenn ein
Signal die Ausführung einer unsicheren Funktion unterbricht, und handler eine unsichere Funktion aufruft,
ist das Verhalten des Programms nicht definiert.
POSIX.1-2004 (auch als POSIX.1-2001 Technical Corrigendum 2 bekannt) fordert von einer Implementierung,
dass die folgenden Funktionen sicher sind, also unbedenklich in einem Signal-Handler verwendet werden
können:
_Exit()
_exit()
abort()
accept()
access()
aio_error()
aio_return()
aio_suspend()
alarm()
bind()
cfgetispeed()
cfgetospeed()
cfsetispeed()
cfsetospeed()
chdir()
chmod()
chown()
clock_gettime()
close()
connect()
creat()
dup()
dup2()
execle()
execve()
fchmod()
fchown()
fcntl()
fdatasync()
fork()
fpathconf()
fstat()
fsync()
ftruncate()
getegid()
geteuid()
getgid()
getgroups()
getpeername()
getpgrp()
getpid()
getppid()
getsockname()
getsockopt()
getuid()
kill()
link()
listen()
lseek()
lstat()
mkdir()
mkfifo()
open()
pathconf()
pause()
pipe()
poll()
posix_trace_event()
pselect()
raise()
read()
readlink()
recv()
recvfrom()
recvmsg()
rename()
rmdir()
select()
sem_post()
send()
sendmsg()
sendto()
setgid()
setpgid()
setsid()
setsockopt()
setuid()
shutdown()
sigaction()
sigaddset()
sigdelset()
sigemptyset()
sigfillset()
sigismember()
signal()
sigpause()
sigpending()
sigprocmask()
sigqueue()
sigset()
sigsuspend()
sleep()
sockatmark()
socket()
socketpair()
stat()
symlink()
sysconf()
tcdrain()
tcflow()
tcflush()
tcgetattr()
tcgetpgrp()
tcsendbreak()
tcsetattr()
tcsetpgrp()
time()
timer_getoverrun()
timer_gettime()
timer_settime()
times()
umask()
uname()
unlink()
utime()
wait()
waitpid()
write()
POSIX.1-2008 entfernt fpathconf(), pathconf() und sysconf() aus der obigen Liste und fügt die folgenden
Funktionen hinzu:
execl()
execv()
faccessat()
fchmodat()
fchownat()
fexecve()
fstatat()
futimens()
linkat()
mkdirat()
mkfifoat()
mknod()
mknodat()
openat()
readlinkat()
renameat()
symlinkat()
unlinkat()
utimensat()
utimes()
POSIX.1-2008 Technical Corrigendum 1 (2013) fügt die folgenden Funktionen hinzu:
fchdir()
pthread_kill()
pthread_self()
pthread_sigmask()
Unterbrechung von Systemaufrufen und Bibliotheksfunktionen durch Signal-Handler
Wenn ein Signal-Handler aufgerufen wird, während ein Systemaufruf oder Bibliotheksfunktionsaufruf
blockiert ist, wird entweder:
* nach Abschluss des Signal-Handlers der Aufruf neu gestartet oder
* der Aufruf schlägt mit dem Fehler EINTR fehl.
Welche dieser beiden Verhaltensweisen eintritt, hängt von der Schnittstelle und der Verwendung oder
Nichtverwendung des Schalters SA_RESTART ab (siehe sigaction(2)). Die Einzelheiten unterscheiden sich
zwischen UNIX-Systemen. Im Folgenden werden die Linux-Spezifika erörtert.
Wenn ein blockierter Aufruf einer der folgenden Schnittstellen von einem Signal-Handler unterbrochen
wird, wird der Aufruf nach der Rückkehr aus dem Signal-Handler erneut gestartet, wenn der Schalter
SA_RESTART verwendet wurde; anderenfalls schlägt der Aufruf mit dem Fehler EINTR fehl:
* read(2), readv(2), write(2), writev(2), and ioctl(2) calls on "slow" devices. A "slow" device is
one where the I/O call may block for an indefinite time, for example, a terminal, pipe, or socket.
If an I/O call on a slow device has already transferred some data by the time it is interrupted by
a signal handler, then the call will return a success status (normally, the number of bytes
transferred). Note that a (local) disk is not a slow device according to this definition; I/O
operations on disk devices are not interrupted by signals.
* open(2), wenn er blockieren kann (z. B. beim Öffnen eines FIFOs; siehe fifo(7)).
* wait(2), wait3(2), wait4(2), waitid(2) und waitpid(2).
* Socket-Schnittstellen: accept(2), connect(2), recv(2), recvfrom(2), recvmmsg(2), recvmsg(2),
send(2), sendto(2) und sendmsg(2), es sei denn, es wurde für den Socket eine Zeitbegrenzung
(Timeout) festgelegt (siehe unten).
* File locking interfaces: flock(2) and the F_SETLKW and F_OFD_SETLKW operations of fcntl(2)
* POSIX-Schnittstellen für Nachrichten-Warteschlangen: mq_receive(3), mq_timedreceive(3), mq_send(3),
and mq_timedsend(3).
* futex(2) FUTEX_WAIT (seit Linux 2.6.22; vorher immer Fehlschlag mit EINTR).
* io_getevents(2)
* pthread_mutex_lock(3), pthread_cond_wait(3) und verwandte APIs.
* futex(2) FUTEX_WAIT_BITSET.
* POSIX-Semaphor-Schnittstellen: sem_wait(3) und sem_timedwait(3) (seit Linux 2.6.22; vorher immer
Fehlschlag mit EINTR).
Folgende Schnittstellen werden nach einer Unterbrechung durch einen Signal-Handler, unabhängig von der
Verwendung von SA_RESTART nie erneut gestartet; sie schlagen immer mit dem Fehler EINTR fehl:
* »Eingabe«-Socket-Schnittstellen, wenn für den Socket mittels setsockopt(2) eine Zeitbegrenzung
(Timeout, SO_RCVTIMEO) festgelegt wurde: accept(2), recv(2), recvfrom(2), recvmmsg(2) (auch mit
einem von NULL verschiedenen Argument timeout) und recvmsg(2).
* »Ausgabe«-Socket-Schnittstellen, wenn für den Socket mittels setsockopt(2) eine Zeitbegrenzung
(Timeout, SO_RCVTIMEO) festgelegt wurde: connect(2), send(2), sendto(2) und sendmsg(2).
* Schnittstellen, mit denen auf Signale gewartet wird: pause(2), sigsuspend(2), sigtimedwait(2) und
sigwaitinfo(2).
* Schnittstellen, die Dateideskriptoren mehrfach nutzen: epoll_wait(2), epoll_pwait(2), poll(2),
ppoll(2), select(2) und pselect(2).
* System-V-IPC-Schnittstellen: msgrcv(2), msgsnd(2), semop(2), and semtimedop(2).
* Schlaf-Systemaufrufe: clock_nanosleep(2), nanosleep(2), and usleep(3).
* read(2) von einem inotify(7)-Dateideskriptor
* io_getevents(2)
Die Funktion sleep(3) wird ebenfalls niemals neu gestartet, wenn sie durch einen Handler unterbrochen
wurde, wird aber erfolgreich verlassen: Der Rückgabewert ist die Zeit, die noch geschlafen werden sollte.
Unterbrechung von Systemaufrufen und Bibliotheksfunktionen durch Stop-Signale
Auf Linux können sogar ohne Signal-Handler bestimmte sperrende Systemaufrufe mit dem Fehler EINTR
fehlschlagen, nachdem der Prozess von einem der Stop-Signale gestoppt wird und dann mittels SIGCONT
wieder fortgesetzt. Dieses Verhalten ist nicht durch POSIX.1 sanktioniert und tritt nicht auf anderen
Systemen auf.
Die folgenden Linux-Schnittstellen zeigen dieses Verhalten:
* »Eingabe«-Socket-Schnittstellen, wenn für den Socket mittels setsockopt(2) eine Zeitbegrenzung
(Timeout, SO_RCVTIMEO) festgelegt wurde: accept(2), recv(2), recvfrom(2), recvmmsg(2) (auch mit
einem von NULL verschiedenen Argument timeout) und recvmsg(2).
* »Ausgabe«-Socket-Schnittstellen, wenn für den Socket mittels setsockopt(2) eine Zeitbegrenzung
(Timeout, SO_RCVTIMEO) festgelegt wurde: connect(2), send(2), sendto(2) und sendmsg(2), falls eine
Sendezeitüberschreitung (SO_SNDTIMEO) gesetzt wurde.
* epoll_wait(2), epoll_pwait(2).
* semop(2), semtimedop(2).
* sigtimedwait(2), sigwaitinfo(2).
* read(2) von einem inotify(7)-Dateideskriptor
* Linux 2.6.21 und früher: futex(2) FUTEX_WAIT, sem_timedwait(3), sem_wait(3).
* Linux 2.6.8 und früher: msgrcv(2), msgsnd(2).
* Linux 2.4 und früher: nanosleep(2).
KONFORM ZU
POSIX.1, mit den beschriebenen Ausnahmen
SIEHE AUCH
kill(1), getrlimit(2), kill(2), killpg(2), restart_syscall(2), rt_sigqueueinfo(2), setitimer(2),
setrlimit(2), sgetmask(2), sigaction(2), sigaltstack(2), signal(2), signalfd(2), sigpending(2),
sigprocmask(2), sigsuspend(2), sigwaitinfo(2), abort(3), bsd_signal(3), longjmp(3), raise(3),
pthread_sigqueue(3), sigqueue(3), sigset(3), sigsetops(3), sigvec(3), sigwait(3), strsignal(3),
sysv_signal(3), core(5), proc(5), nptl(7), pthreads(7), sigevent(7)
KOLOPHON
Diese Seite ist Teil der Veröffentlichung 4.04 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 http://www.kernel.org/doc/man-pages/.
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von 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>.
Linux 5. Dezember 2015 SIGNAL(7)