Shell-Programmierung
von: Jürgen Wolf
Galileo Press, 2005
ISBN: 9783898426831
Sprache: Deutsch
783 Seiten, Download: 3203 KB
Format: PDF, auch als Online-Lesen
7 Signale (S. 367-368)
Signale werden zur Steuerung von Prozessen verwendet. Wie ein Prozess auf ein bestimmtes Signal reagiert, können Sie entweder dem System überlassen oder selbst festlegen.
7.1 Grundlagen zu den Signalen
Bei Signalen handelt es sich um asynchrone Ereignisse, die eine Unterbrechung (genauer eine Interrupt-Anforderung) auf der Prozessebene bewirken können. Dabei handelt es sich um ein einfaches Kommunikationsmittel zwischen zwei Prozessen (Interprozesskommunikation), bei dem ein Prozess einem anderen eine Nachricht senden kann. Bei den Nachrichten selbst handelt es sich wiederum um einfache Ganzzahlen, welche aber auch mit einem symbolischen (aussagekräftigen) Namen verwendet werden können (auch Macro genannt).
Vorwiegend werden Signale verwendet zur Synchronisation, zum Ausführen von vordefinierten Aktionen oder zum Beenden bzw. Unterbrechen von Prozessen. Generell lassen sich die Signale in drei Kategorien einordnen (die Bedeutung der einzelnen Signale erfahren Sie am Abschnittsende):
- Systemsignale (Hardware- und Systemfehler, ILL, TRAP, BUS, FPE, KILL, SEGV, XCPU, XFSZ, IO)
- Gerätesignale (HUP, INT, PIPE, ALRM, CHLD, CONT, STOP, TTIN, TTOU, URG, WINCH, IO)
- Benutzerdefinierte Signale (QUIT, ABRT, USR1, USR2, TERM)
Sofern Sie nicht wollen, dass die Standardaktion beim Auftreten eines Signals ausgeführt wird (und darum geht es auch in diesem Kapitel), können Sie das Si gnal abfangen und entsprechend darauf reagieren oder es gar vollständig ignorieren. Wenn Sie ein Signal ignorieren, kommt es gar nicht erst bei dem Prozess an.
Für die Reaktion auf Signale stehen Ihnen drei Möglichkeiten zur Verfügung, von denen Sie zwei selbst beeinflussen können (siehe Abbildung 7.1):
- Sie reagieren gar nicht und lassen die vom Kernel vordefinierte Standardaktion ausführen.
- Sie ignorieren das Signal, damit es gar nicht erst beim Prozess ankommt (was allerdings bei den Signalen SIGKILL und SIGSTOP nicht möglich ist).
- Sie fangen das Signal ab und reagieren mit einer entsprechenden Routine darauf.
(Die Abbildung ist kein Bestandteil der Leseprobe)
Signale treten vorwiegend bei Programmfehlern (unerlaubter Speicherzugriff mit einem Zeiger, ungültige Instruktionen, Division durch null ...) auf oder werden vom Benutzer selbst ausgelöst. Bspw. können Sie mit der Tastenkombination (Strg)+(C) (= SIGINT) oder (Strg)+(Z) (= SIGTSTP) einen Prozess in der aktuellen Shell beenden bzw. anhalten.
Einen Überblick zu den Signalen auf Ihrem System erhalten Sie in der Kommandozeile mit kill -l (kleines L). In der Tabelle 7.1 bis Tabelle 7.7 (aufgeteilt nach Themen der Signale) finden Sie eine Auflistung der Signale (mitsamt deren Nummern und Standardaktionen) und ihrer Bedeutung. Allerdings gilt die hier gezeigte Übersicht nur für Intel- und PPC-Prozessor-Systeme. Sparc- und Alpha- oder MIPS-Prozessor-basierte Systeme haben zumindest zum Teil eine andere Signalnummer. Die Nummern weichen auch unter FreeBSD ab – hier scheinen die Systeme eigene Süppchen zu kochen. Ein weiterer Grund, den symbolischen Namen statt der Nummer zu verwenden.