[[linux:posix-signals]]

POSIX Signals

POSIX Signale (engl. „Signals“) sind Nachrichten die von einem zu anderen Prozess gesendet werden (um Statusänderungen anzuzeigen).

Wichtigere/oft benutzte Signale sind fett markiert, angegeben sind ist die Standverwendung, Programm können diese möglicherweise ignorieren oder anders verwenden.

:!: Tastenkomination eines Terminals lassen sich mit stty -a heraussfinden.

Signal Bedeutung/ Wirkung
SIGHUP Hangup (Programme bekommen dieses Signal wenn das Terminal geschlossen wird, daemons reagieren meist wird dem Neulesen der Konfiguration)
SIGINT Signal: Interrupt (beendet ein Programm, wird im Terminal normalerweise mit Tastenkombination „STRG“ + „C“ ausgelöst)
SIGQUIT Quit (beendet ein Programm und verlanlasst dieses eine Core-Dump (eine Speicherabbild zur Fehleranalyse) zu schreiben, im Terminal ist die Tastenkombination üblichweise „STRG“ + „\“)
SIGILL Illegal Instruction (illegale Anwendung oder CPU-Code, beendet ein Programm und erstellt einen Core-Dump)
SIGTRAP Breakpoint/Trace Trap (zum debuggen von Programmen)
SIGABRT (aka SIGIOT) Abort (oder: „Signal: IOT Trap“; ein Programm beendet sich weil es eine illegalen Zustand festgestellt hat und erstellt eine Core-Datei)
SIGBUS Bus Error (ein Speicherzugriff wurd auf eine unzulässige Weise versucht, beendet ein Programm und erstellt eine Core-Datei)
SIGFPE FloatingPoint Exception (beendet ein Programm und erstellt eine Core-Datei weil ein Fließkommafehler „floating point error“ auftrat:
  * Integer divide by zero
  * Integer overflow
  * FloatingPoint divide by zero
  * FloatingPoint overflow
  * FloatingPoint underflow
  * FloatingPoint inexact result
  * FloatingPoint invalid operation
  * Subscript out of range
SIGKILL KILL (beendet ein Programm radikal und sofort ohne Möglichkeit dieses Signal abzufangen oder zu ignorieren. Es hat auf allen Systemen die Nummer 9 und sollte nur als letzte Maßnahme angewandt werden)
SIGUSR1 User defined Signal 1 (Benutzerdefiniertes Signal, dd reagiert z. B. mit dem aktuellen Kopierfortschritt; Standardmäßig beendet sich ein Programm nach diesem Signal)
SIGSEGV Segmentation Violation (bzw. SegmentationFault; dieses Signal tritt bei falschen Referenzen auf Speicher auf, das Programm wird beendet und eine Core-Datei erstellt. Ursache sind fast immer Programmierfehler:
  * ein "pointer" ist "NULL" (unreferenziert, uninitialisiert oder bereits freigegeben)
  * eine Adresse ist nicht zum Objekt zugeordnet (z. B. unbenutzter oder bereits durch das Betriebssysten freigegebener Speicher)
  * ungültige Zugriffsrechte
SIGUSR2 User defined signal 2 (reserviert für IPC oder andere Mechanismen, normalerweise beendet sich ein Programm nach diesem Signal)
SIGPIPE Pipe (ausgelöst wenn ein Programm auf einen Socket oder fifo schreibt, der keinen Empfänger hat. Standardmäßig beendet sich ein Programm nach diesem Signal)
SIGALRM Alarm (wird nach einer bestimmten Anzahl von Sekunden nach dem Aufruf des alarm(2)-Systembefehls ausgelöst. Wird oft für die Erkennung von timeouts bei Systembefehlen benutzt, standardmäßig beendet sich ein Programm nach diesem Signal)
SIGTERM Signal: Terminate (ein Programm bekommt die Möglichkeit sich sauber zu beenden indem es das Signal abfängt. Standardmäßig beendet sich ein Programm nach diesem Signal)
SIGSTKFLT Signal: Stack fault on coprocessor (Standardmäßig beendet sich ein Programm nach diesem Signal)
SIGCHLD Child process (Ein abgeleiteter Kindprozeß hat seinen Status geändert, z. B. ein Signal empfangen oder sich beendet. Durch das Abfangen dieses Signals können Zombie-Prozesse erkannt und vermieden werden. Wird Standardmäßig ignoriert - SIG_DFL.)
SIGCONT Continue (Ein Prozeß kann von einem vorherigen SIGSTOP weiter machen. Im Gegensatz zu SIGSTOP kann SIGCONT abgefangen werden.)
SIGSTOP Stop (Hält einen Prozeß an bis ein SIGCONT empfangen wird, kann nicht abgefangen oder ignoriert werden.)
SIGTSTP Terminal Stop (Die STOP-Tastenkomination „STRG“ + „Z“ wurde an ein Terminal gesendet. Standardmäßig hält dies einen Prozeß wie bei SIGSTOP an.)
SIGTTIN Terminal Input on Background Process (Ein Prozeß versucht von einem Terminal zu lesen, das er nicht mehr kontrolliert. Das Programm wird angehalten bis SIGCONT gesendet wird.)
SIGTTOU tty output on background process (Ein Hintergrund-Prozeß hat versucht auf ein Terminal auszugeben, das Programm wird angehalten bis SIGCONT gesendet wird. Das Signal kann abgefangen oder ignoriert werden, siehe SIGTTIN.)
SIGURG Urgent (wird vom Betriebssystem gesendet wenn eilige Daten auf einem socket warten, wird standardmäßig ignoriert.
SIGXCPU CPU Time limit exceeded (ein mit ulimit(1) gesetztes CPU-Zeitlimit wurde überschritten, beendet ein Programm und erstellt einen Core-Dump)
SIGXFSZ File size limit exceeded (ein mit ulimit(1) gesetzte maximale Dateigröße wurde überschritten, beendet ein Programm und erstellt einen Core-Dump)
SIGVTALRM Virtual Alarm Clock (User-mode Signal das ein Programm beendet)
SIGPROF Profiling Timer Expired (benutzt für statistische Leistungsanalyse/Profiling, beendet den Prozeß)
SIGWINCH Window size Change (Wird an einen Prozeß gesendet wenn sich die Größe des Terminalfensters ändert. Standardmäßig wird das Signal ignoriert.)
SIGIO Input/Output now possible (Ein Programm bekommt dieses Signal wenn ein E/A möglich wurde. Siehe fcntl(2); Standardmäßig wird das Programm geschlossen.)
SIGPWR Powerfail (Wird ausschließlich an Init gesendet wenn der Kernel einen Spannungsausfall erkannt hat und an einer USV läuft.)
SIGSYS Bad argument to routine (Falsches Argument an eine Routine, Standardmäßig wird das Programm geschlossen.)