AA_PO-21492-123RF-Hypermania2_123RF-Ampeln_resized.jpg

© Hypermania2, 123RF

Prozesse, hört die Signale!

Signale sind ein wichtiges Linux-Feature

09.10.2013
Programme können unter Linux kommunizieren, indem sie sich "Signale" schicken. Wie das geht und wofür man Signale braucht, verraten wir in diesem Basics-Artikel.

Wenn Sie aus einem Terminalprogramm heraus ein anderes Programm starten, dann schläft die Shell solange, bis dieses Programm beendet ist. Wie kriegt sie mit, dass das andere Programm fertig ist? Linux schickt der Shell ein Signal und macht sie damit darauf aufmerksam, dass ein so genannter Kindprozess beendet wurde.

Das ist nur eines von vielen Anwendungsgebieten für Signale. Aus Benutzersicht sind Ihnen vielleicht die TERM- und KILL-Signale bekannt: Die können Sie mit dem Kommando kill an ein Programm schicken, um es zu beenden. Das KILL-Signal ist dabei das härtere: Es beendet einen Prozess in jedem Fall, egal, in welchem Zustand dieser gerade ist. Im Vergleich ist das TERM-Signal friedlicher und lässt dem Prozess noch die Gelegenheit zum Aufräumen.

Nun war hier abwechselnd von Programmen und Prozessen die Rede – sind das nicht gleichwertige Ausdrücke? Nein, ein Programm ist eine Datei auf der Festplatte, z. B. die Programmdatei firefox des Browsers Firefox. Ein Prozess entsteht erst, wenn Sie dieses Programm in den Speicher laden und starten. Einige Programme darf man auch mehrfach starten, so dass dann mehrere Prozesse laufen, die dasselbe Programm ausführen. Beim Verschicken von Signalen ist es immer wichtig, den richtigen Prozess anzusprechen.

Signalbehandlung

Das Funktionsprinzip von Signalen ist bei allen Unix-artigen Betriebssystemen (also auch bei Linux) gleich: Prozesse (oder auch das Betriebssystem selbst) können Signale an andere Prozesse verschicken. Wenn das passiert, geschieht zunächst wenig: Linux verwaltet für jeden Prozess eine Liste der empfangenen Signale, und wenn Prozess A ein Signal an Prozess B schickt, wird dies im passenden Listeneintrag von Prozess B vermerkt. Wird dieser das nächste Mal aktiv, setzt er nicht seine eigentliche Aufgabe fort. Stattdessen prüft Linux, ob er einen so genannten Signal-Handler für das Signal eingetragen hat. Das ist eine Programmfunktion, die im Normalbetrieb nie aufgerufen wird, sondern nur dann, wenn das zugehörige Signal empfangen wurde. Der Signal-Handler erledigt dann seine Arbeit, z. B. kann ein Signal-Handler für das TERM-Signal (terminate, beenden) dafür sorgen, dass das Programm Inhalte aus dem Speicher noch in eine offene Datei schreibt und diese dann schließt. Bei manchen Programmen öffnet der TERM-Signal-Handler ein Fenster und fragt nach, ob der Anwender das Programm wirklich schließen möchte.

Alternativ zum Einrichten eines Signal-Handlers haben Programme noch zwei weitere Möglichkeiten:

  • Sie können das Signal ignorieren, dann hat (im Beispiel des TERM-Signals) ein empfangenes Signal keine Wirkung mehr. Allerdings lassen sich nicht alle Signale ignorieren, das KILL-Signal z. B. wird immer verarbeitet.
  • Sie können eine Standardaktion ausführen lassen (was auch die Vorgabe ist, wenn ein Programm keinen eigenen Signal-Handler registriert): Um wieder das TERM-Signal als populärstes Beispiel zu verwenden, wird hier ein Programm einfach abgebrochen. Darum kann man fast alle Programme erfolgreich beenden, indem man ihnen ein TERM-Signal schickt.

Signalübersicht

Je nach Linux-Version (bzw. Unix-Version) stehen unterschiedliche Signale zur Verfügung. Eine Liste der bekannten Signale erhalten Sie, indem Sie in einem Terminalfenster den Befehl kill -l eingeben (Abbildung 1). In der Liste beginnt jeder Signalname mit "SIG"; diesen Teil lässt man im Normalfall weg, wenn man von einem Signal spricht. Das Signal SIGTERM (Nummer 15) bezeichnen wir also nur als TERM.

Abbildung 1: Die Liste der bekannten Signale kann auf jedem Linux-System anders aussehen. Wichtig sind nur die Signale mit Nummern unter 32.

Die "interessanten" Signale haben meist eine Nummer unter 32; bei Linux haben alle Signalnummern ab 32 etwas mit Echtzeitverarbeitung zu tun. Die folgenden Signale können Sie auch als Anwender von der Konsole aus verschicken:

  • HUP (1): Das Hang-up-Signal ist klassisch dafür vorgesehen, Prozesse zu beenden, die von einem entfernten Rechner aus gestartet wurden, wobei die Verbindung zwischen den Rechnern nicht mehr besteht. Das passiert auch heute noch so, wenn Sie sich per ssh auf einem anderen Rechner einloggen, dort Programme starten und dann ohne vorherige Abmeldung die Verbindung zum Internet trennen. Nützlicher ist das HUP-Signal aber für Administratoren: Wenn Sie die Konfiguration eines Dienstes (wie z. B. des Apache-Webservers) verändern und dann dem laufenden Apache-Prozess ein HUP-Signal schicken, liest dieser die Konfigurationsdatei neu ein. Das ist besser, als den Serverdienst zu beenden und neu zu starten.
  • TERM (15): Das TERM-Signal ist das Standardsignal, welches das Shell-Programm kill an einen Prozess sendet, wenn Sie keine Signalnummer angeben. Wie schon weiter oben beschrieben, fordert es den Prozess auf, sich zu beenden, erzwingt den Abbruch aber nicht: Wenn der Prozess einen Signal-Handler für TERM eingetragen hat, kann er durchaus weiter arbeiten.
  • KILL (9): Das KILL-Signal ist die agressive Variante des TERM-Signals. Prozesse, die es empfangen, werden rabiat abgebrochen, und sie können dem auch nicht vorbeugen, indem sie einen Signal-Handler installieren: Das geht für das KILL-Signal nicht.
  • STOP (19): Schicken Sie einem Prozess das STOP-Signal, wird er unterbrochen. Vielleicht kennen Sie die Wirkung der Tastenkombination [Strg]+[Z] in einem laufenden Shell-Programm: Diese hat eine ähnliche Funktion. In der Shell können Sie einen mit [Strg]+[Z] unterbrochenen Prozess mit dem Kommando fg (foreground) im "Vordergrund" bzw. mit bg (background) im Hintergrund weiterlaufen lassen. (Hintergrundprozesse blockieren die Shell nicht, so dass dann wieder ein Shell-Prompt erscheint.) Analog können Sie auch einen über das STOP-Signal angehaltenen Prozess wieder weiter laufen lassen:
  • CONT (18): Das CONT-Signal setzt einen Prozess fort, der vorher mit dem STOP-Signal angehalten wurde. Anderenfalls hat es keine Wirkung: Schicken Sie einem laufenden Prozess das CONT-Signal, passiert nichts.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Prozesse anhalten und beenden mit kill
    Ein Linux-System bietet komfortable GUI-Tools für fast alle Zwecke. Schneller und direkter läuft die Kommunikation über die Shell. Was auf den ersten Blick kryptisch ausschaut, gerät schnell zum gewohnten Handwerkszeug. Die Reihe "Gast in der Shell" hilft mit Tipps in loser Folge beim Einstieg.
  • Prozesse im Griff
    OpenOffice hängt – jetzt heißt es, schnell das Programm abzuschießen, bevor der Speicher voll läuft und das System unbenutzbar wird. Am schnellsten geht es auf der Shell.
  • Programme mit top, ps, kill, pidof, nice, renice steuern
    Firefox hängt – jetzt heißt es, schnell das Programm abzuschießen, bevor der Speicher voll läuft und das System unbenutzbar wird. Am schnellsten geht es auf der Shell.
  • Prozess beobachten und beenden auf der Kommandozeile
    Zahlreiche Prozesse tummeln sich auf einem Linux-System: Dieser Artikel bringt Licht ins Prozessdunkel, zeigt, wie Sie Tasks anhalten, fortsetzen oder beenden und verrät, wie Sie Überbleibsel von abgestürzten Programmen ins Jenseits befördern.
  • Präzise Kontrolle
    Auf einem typischen Linux-System laufen viele Anwendungen und Dienste gleichzeitig. Mit den richtigen Befehlen verschaffen Sie sich einen Überblick und greifend steuernd ein.
Kommentare

Infos zur Publikation

title_2014_04

Digitale Ausgabe: Preis € 9,80
(inkl. 19% MwSt.)

EasyLinux erscheint vierteljährlich und kostet EUR 9,80. Weitere Informationen zum Heft finden Sie auf der EasyLinux-Homepage.

Das EasyLinux-Jahresabo mit Prämie kostet ab EUR 33,30. Details zum EasyLinux-Jahresabo finden Sie im Medialinx-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!      

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

Artikelsuche
Erwin Ruitenberg, 09.10.2014 07:51, 1 Antworten
Ich habe seit einige Jahre ein Dugisub LinuxUser. Dann weiß ich das irgendwann ein bestimmtes Art...
Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 6 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...
Server antwortet mit falschem Namen
oin notna, 21.07.2014 19:13, 1 Antworten
Hallo liebe Community, Ich habe mit Apache einen Server aufgesetzt. Soweit, so gut. Im Heimnet...