Signal (Unix)
Bei Verwendung des Betriebssystems Unix ist ein Signal eine Systemnachricht an einen laufenden Prozess. Signale sind eine primitive Form der Interprozesskommunikation. Die meisten Signale bewirken auch eine Aktion – meist das Beenden des Prozesses. Andere hingegen dienen lediglich der Information (z. B. SIGWINCH) oder können einen Prozess anhalten (SIGSTOP). Es gibt auch vom Benutzer frei verwendbare Signale (SIGUSR1 und SIGUSR2). Einige Signale können vom Prozess abgefangen oder unterdrückt werden. So fangen z. B. manche Serverprogramme (im Unix-Jargon „Daemon“) SIGUSR1 oder SIGUSR2 ab und lesen dann ihre Konfigurationsdateien neu ein.
Gängige UNIX-Signale
Im Folgenden werden die üblichen Signale mit ihren Nummern aufgelistet. Die unterstützten Signale und deren Werte können sich von System zu System unterscheiden. Der POSIX.1-Standard sieht hierbei unterschiedliche numerische Werte abhängig von der verwendeten Hardwarearchitektur vor.
Beim Präfix SIG handelt es sich jeweils um die Kurzform von Signal.
Mit dem Befehl kill -l
werden gewöhnlich alle unterstützten Signalnummern mit den zugehörigen Namen ausgegeben. Die Tabelle unten enthält beispielhaft die folgenden Werte:
- Spalte A: GNU-C-Bibliothek
- Spalte B: Linux, Architekturen Alpha und SPARC
- Spalte C: Linux, x86, AMD64, ARM und die meisten anderen Prozessorarchitekturen
- Spalte D: Linux, MIPS
Signal | Werte, Synonym | Bedeutung (englisch) | Bedeutung (übersetzt) | Ursprüngliche Verwendung, Standards | |||
---|---|---|---|---|---|---|---|
A | B | C | D | ||||
SIGHUP | 1 | Hangup detected on controlling terminal or death of controlling process | Unterbrechung der Verbindung zum Terminal | System V[1]; POSIX (1990) | |||
SIGINT | 2 | Interrupt from keyboard; interactive attention signal. | Interrupt durch die Tastatur; interaktives Warnsignal. | C89; POSIX (1990) | |||
SIGQUIT | 3 | Quit from keyboard. | Beenden durch die Tastatur. | ||||
SIGILL | 4 | Illegal instruction. | Ungültige Anweisung. | C89; POSIX (1990) | |||
SIGTRAP | 5 | Trace/breakpoint trap. | Haltemarke erreicht. | SUSv2; POSIX (2001) | |||
SIGABRT | 6 | Abnormal termination; abort signal from abort(3). | abnormale Beendigung. | C89; POSIX (1990) | |||
SIGIOT | |||||||
SIGIOT | 6 | IOT trap; abort() on a PDP11. | 4.2BSD | ||||
SIGABRT | |||||||
SIGEMT | – | 7 | – | 7 | |||
SIGBUS | 10 | 10 | 7 | 10 | BUS error (bad memory access). | BUS Fehler (Speicherzugriffsfehler). | 4.2BSD; SUSv2; POSIX (2001) |
SIGFPE | 8 | „Floating-point exception“: erroneous arithmetic operation. | „Gleitkommaoperation Ausnahmefehler“: fehlerhafte arithmetische Operation. | C89; POSIX (1990) | |||
SIGKILL | 9 | Kill, unblockable. | Unblockbares Beenden. | POSIX (1990) | |||
SIGUSR1 | 30 | 30 | 10 | 16 | User-defined signal 1. | Benutzerdefiniertes Signal 1. | POSIX |
SIGSEGV | 11 | „Segmentation violation“: invalid memory reference. | „Schutzverletzung“: ungültige Speicherreferenz. | C89; POSIX (1990) | |||
SIGUSR2 | 31 | 31 | 12 | 17 | User-defined signal 2. | Benutzerdefiniertes Signal 2. | POSIX |
SIGPIPE | 13 | „Broken pipe“: write to pipe with no readers. | „Broken pipe“: Schreiben auf eine Pipe ohne Empfänger. | POSIX (1990) | |||
SIGALRM | 14 | Alarm clock timer signal: alarm(2). | Wecker Signal: Alarm(2). | POSIX (1990) | |||
SIGTERM | 15 | Termination request. | Beendigungsanfrage. | C89; POSIX (1990) | |||
SIGSTKFLT | – | – | 16 | – | Stack fault on coprocessor (unused). | Stapelfehler auf Coprozessor (unbenutzt). | |
SIGCHLD | 20 | 20 | 17 | 18 | Child status has changed (stopped or terminated). | Kindstatus wurde geändert (angehalten oder beendet). | POSIX (1990) |
SIGCLD | |||||||
SIGCLD | 20 | – | – | – | Old System V name; child status has changed. | Alte System V Bezeichnung; Kindstatus wurde geändert. | System V |
SIGCHLD | |||||||
SIGCONT | 19 | 19 | 18 | 25 | Continue stopped process. | Fahre angehaltenen Prozess fort. | POSIX |
SIGSTOP | 17 | 17 | 19 | 23 | Stop process, unblockable. | Halte Prozess an, unblockierbar. | POSIX |
SIGTSTP | 18 | 18 | 20 | 24 | Stop typed at keyboard. | Eingabe von Stop durch die Tastatur. | POSIX |
SIGTTIN | 21 | 21 | 21 | 26 | Background read from tty. | Lesen vom Terminal im Hintergrund | POSIX |
SIGTTOU | 22 | 22 | 22 | 27 | Background write to tty | Schreiben auf ein Terminal im Hintergrund. | POSIX |
SIGURG | 16 | 16 | 23 | 21 | Urgent condition on socket: high bandwidth data is available. | Wichtiger Zustand auf Socket: Daten mit hoher Bandbreite sind verfügbar. | 4.2BSD; SUSv2; POSIX (2001) |
SIGXCPU | 24 | 24 | 24 | 30 | CPU time limit exceeded. | Prozessorzeitbegrenzung überschritten. | 4.2BSD; SUSv2; POSIX (2001) |
SIGXFSZ | 25 | 25 | 25 | 31 | File size limit exceeded. | Dateigrößenbeschränkung überschritten. | 4.2BSD; SUSv2; POSIX (2001) |
SIGVTALRM | 26 | 26 | 26 | 28 | Virtual alarm clock. | Virtueller Wecker. | 4.2BSD; SUSv2; POSIX (2001) |
SIGPROF | 27 | 27 | 27 | 29 | Profiling alarm clock timer expired. | 4.2BSD; SUSv2; POSIX (2001) | |
SIGWINCH | – | 28 | 28 | 20 | Window size change. | Fenstergröße änderte sich. | 4.3BSD; Sun |
SIGPOLL | 23 | 23/– | 29/– | 23/– | Pollable event occurred. | Abfragbares Ereignis aufgetreten. | System V; SUSv2; POSIX (2001) |
SIGIO | |||||||
SIGIO | 23 | 23 | 29 | 23 | I/O now possible. | I/O jetzt möglich. | 4.2BSD |
SIGPOLL | |||||||
SIGINFO | – | (29) | – | – | Status request from keyboard. | Statusanfrage durch die Tastatur. | macOS |
SIGPWR | |||||||
SIGLOST | – | (29)/– | – | – | Unused; only on Sparc: file lock lost. | Unbenutzt; nur unter Sparc: Dateisperre verloren. | |
SIGPWR | – | (29) | 30 | 19 | Power failure restart. | Stromausfall bedingter Neustart. | System V |
SIGINFO | |||||||
SIGSYS | 12 | 12 | 31 | 12 | Bad system call. | ungültiger Systemaufruf. | System Vr4; SUSv2; POSIX (2001) |
SIGUNUSED | |||||||
SIGUNUSED | 12 | – | 31/– | – | |||
SIGSYS |
Neuere Linux-Versionen verwenden neben den üblichen 31 Signalnummern noch bis zu 32 weitere Signale als Echtzeit (Real-Time) Signale: von SIGRTMIN, je nach C-Bibliothek 33, 34 oder 35, bis SIGRTMAX (64).
Aktionen
Das Standardverhalten der Programme, wenn sie eines der Signale empfangen, ist eine der folgenden Aktionen:
- Anhalten (nicht beenden) des laufenden Programms.
- Fortsetzen des zuvor angehaltenen Programms.
- Beenden des Programms ohne einen Speicherauszug.
- Beenden des Programms mit Schreiben eines Speicherauszugs.
- Ignorieren des Signals.
Bis auf SIGKILL und SIGSTOP können die Signale vom Programm „abgefangen“ werden und eine andere Reaktion auslösen.
Literatur
- Jürgen Gulbins: UNIX. Springer Verlag, Berlin / Heidelberg / New York, 3. Auflage 1988, ISBN 3-540-19248-4. (Seite 106 Kommandos, Programme, Prozesse, Seite 575 Systemanschlüsse und C-Bibliotheksfunktionen)
- W. Richard Stevens: Programmieren von UNIX-Netzen. Aus dem Englischen von Michael Fuese, Werner Maisch, Eberhard Trautwein. Carl Hanser Verlag, München / Wien 1992, ISBN 3-446-16318-2, Kapitel 2.4 Signale Seite 54. (Englische Originalausgabe von Prentince-Hall ISBN 0-13-928748-5)
Siehe auch
Das Unix-Kommando kill kann verwendet werden, um beliebige Signale unter Unix zu senden.
Weblinks
- Auflistung und Beschreibung gängiger Signale (englisch)
- Handbuchseite des Betriebssystems Linux
- Datei „signum.h“ der GNU-C-Bibliothek