Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
Shell-Programmierung von Jürgen Wolf
Einführung, Praxis, Referenz
Buch: Shell-Programmierung

Shell-Programmierung
782 S., mit CD, 44,90 Euro
Rheinwerk Computing
ISBN 3-89842-683-1
gp Kapitel 7 Signale
  gp 7.1 Grundlagen zu den Signalen
  gp 7.2 Signale senden – kill
  gp 7.3 Eine Fallgrube für Signale – trap
    gp 7.3.1 Einen Signalhandler (Funktion) einrichten
    gp 7.3.2 Mit Signalen Schleifendurchläufe abbrechen
    gp 7.3.3 Mit Signalen das Script beenden
    gp 7.3.4 Das Beenden der Shell (oder eines Scripts) abfangen
    gp 7.3.5 Signale ignorieren
    gp 7.3.6 Signale zurücksetzen

Kapitel 7 Signale

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.


Rheinwerk Computing

7.1 Grundlagen zu den Signaletoptop

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):

gp  Systemsignale (Hardware- und Systemfehler, ILL, TRAP, BUS, FPE, KILL, SEGV, XCPU, XFSZ, IO)
gp  Gerätesignale (HUP, INT, PIPE, ALRM, CHLD, CONT, STOP, TTIN, TTOU, URG, WINCH, IO)
gp  Benutzerdefinierte Signale (QUIT, ABRT, USR1, USR2, TERM)

Wenn ein Prozess ein bestimmtes Signal erhält, wird dieses Signal in einen so genannten Prozesstabelleneintrag hinterlegt. Sobald diesem Prozess Rechenzeit der CPU zur Verfügung steht, um seine Befehle abzuarbeiten, wird der Kernel aktiv und sieht nach, wie auf das Signal reagiert werden soll (alles natürlich ein wenig vereinfacht erklärt). Hier können Sie jetzt ins Geschehen eingreifen und auf das Eintreten eines Signals reagieren. Sofern Sie gar nichts unternehmen, führt der Kernel die Standardaktion für das entsprechende Signal aus. Was die Standardaktion ist, hängt vom jeweiligen Signal ab. Meistens handelt es sich dabei um die Beendigung des Prozesses. Einige Signale erzeugen auch einen Core-Dump (Speicherabbild eines Prozesses), welcher zum Debuggen verwendet werden kann.

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 Signal 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):

gp  Sie reagieren gar nicht und lassen die vom Kernel vordefinierte Standardaktion ausführen.
gp  Sie ignorieren das Signal, damit es gar nicht erst beim Prozess ankommt (was allerdings bei den Signalen SIGKILL und SIGSTOP nicht möglich ist).
gp  Sie fangen das Signal ab und reagieren mit einer entsprechenden Routine darauf.

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 7.1   Mögliche Reaktionen beim Auftreten eines Signals


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.


Tabelle 7.1   Signale, die meist bei Programmfehlern auftreten

Name Nr. Aktion Verfügbar Bedeutung
SIGILL 4 Core & Ende POSIX Ungültige Instruktion wurde ausgeführt.
SIGTRAP 5 Core & Ende Unterbrechung (Einzelschrittausführung)
SIGABRT 6 Core & Ende POSIX Abnormale Beendigung
SIGBUS 7 Core & Ende Fehler auf dem System-Bus
SIGFPE 8 Core & Ende POSIX Problem bei einer Gleitkommaoperation (z. B. Teilung durch null)
SIGSEGV 11 Core & Ende POSIX Speicherzugriff auf unerlaubtes Speichersegment
SIGSYS 31 Core & Ende Ungültiges Argument bei System-Call
SIGEMT Ende Emulations-Trap
SIGIOT Core & Ende Wie SIGABRT


Tabelle 7.2   Signale, die den Prozess beenden

Name Nr. Aktion Verfügbar Bedeutung
SIGHUP 1 Ende POSIX Abbruch einer Dialogstationsleitung bzw. Konfiguration neu laden für Dämonen
SIGINT 2 Ende POSIX Interrupt der Dialogstation ((Strg)+(C))
SIGQUIT 3 Core & Ende POSIX Das Signal quit von einer Dialogstation
SIGKILL 9 Ende POSIX Das Signal kill
SIGTERM 15 Ende POSIX Programme, die SIGTERM abfangen, bieten meistens einen »Soft Shutdown« an.


Tabelle 7.3   Signale, die bei Beendigung eines Timers auftreten – Alarm

Name Nr. Aktion Verfügbar Bedeutung
SIGALRM 14 Ende POSIX Zeituhr ist abgelaufen – alarm().
SIGVTALRM 26 Ende BSD, SVR4 Der virtuelle Wecker ist abgelaufen.
SIGPROF 27 Ende Timer zur Profileinstellung ist abgelaufen.


Tabelle 7.4   Asynchrone E/A-Signale

Name Nr. Aktion Verfügbar Bedeutung
SIGURG 23 Ignoriert BSD, SVR4 Dringender Socketstatus ist eingetreten.
SIGIO 29 Ignoriert BSD, SVR4 Socket E/A ist möglich.
SIGPOLL Ende SVR4 Ein anstehendes Ereignis bei Streams wird signalisiert.


Tabelle 7.5   Signale zur Prozesskontrolle

Name Nr. Aktion Verfügbar Bedeutung
SIGCHLD 17 Ignoriert POSIX Der Kind-Prozess wurde beendet oder angehalten.
SIGCONT 18 Ignoriert POSIX Ein angehaltener Prozess soll weiterlaufen.
SIGSTOP 19 Anhalten POSIX Der Prozess wurde angehalten.
SIGTSTP 20 Anhalten POSIX Der Prozess wurde »von Hand« mit STOP angehalten.
SIGTTIN 21 Anhalten POSIX Prozess wollte aus einem Hintergrundprozess der Kontroll-Dialogstation lesen.
SIGTTOU 22 Anhalten POSIX Prozess wollte in einem Hintergrundprozess der Kontroll-Dialogstation schreiben.
SIGCLD Ignoriert Wie SIGCHLD


Tabelle 7.6   Signale, die bei Fehlern einer Operation ausgelöst werden

Name Nr. Aktion Verfügbar Bedeutung
SIGPIPE 13 Ende POSIX Es wurde in eine Pipe geschrieben, aus der niemand liest. Es wurde versucht, in eine Pipe mit O_NONBLOCK zu schreiben, aus der keiner liest.
SIGLOST Ende Eine Dateisperre ging verloren.
SIGXCPU 24 Core & Ende BSD, SVR4 Maximale CPU-Zeit wurde überschritten.
SIGXFSZ 25 Core & Ende BSD, SVR4 Maximale Dateigröße wurde überschritten.


Tabelle 7.7   Die restlichen Signale

Name Nr. Aktion Verfügbar Bedeutung
SIGUSR1 SIGUSR2 10, 12 Ende POSIX Frei zur eigenen Benutzung
SIGWINCH 28 Ignoriert BSD Window-Größe hat sich verändert.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
 << zurück
  
  Zum Katalog
Zum Katalog: Shell-Programmierung
Shell-Programmierung
bestellen
 Buchtipps
Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-Server






 Linux-Server


Zum Katalog: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Katalog: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Katalog: Linux Handbuch






 Linux Handbuch


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de