Es gibt kein fehlerfreies Programm und überall Benutzer, die einem sonst sehr zuverlässigen Programm ganz erstaunliches und unerklärliches Verhalten entlocken, und es gibt das Naturgesetz von Murphy ...
Deshalb kommt es mit Sicherheit bei jedem Rechner irgendwann einmal zu einem Programmabsturz.
Aber nicht jedes fehlerhafte Programm führt gleich zu einem kompletten Systemabsturz. Durch die Architektur des Betriebssystems hat jedes Programm seinen eigenen, geschützten Speicherbereich, in den kein anderes Programm schreiben oder hineinsehen darf. Beim Versuch, auf den Speicherbereich eines anderen Programms zuzugreifen, wird jedes Programm sofort mit dem SIGSEGV Signal abgebrochen. Dieses Programm wird dadurch sofort aus dem Arbeitsspeicher gelöscht und kann keinen Schaden mehr anrichten.
Wenn ein Programm wegen eines solchen Fehlers vom Betriebssystem abgebrochen werden muß, wird automatisch ein Speicherabzug (core) des gesamten Speicherbereiches des Prozesses auf der Festplatte im aktuellen Verzeichnis abgelegt. Die maximale Größe dieses Speicherabzuges kann mit dem ulimit-Kommando begrenzt werden.
Viel öfter passiert es, daß ein Prozeß sich äufhängt''. So ein
Prozeß arbeitet noch irgendwie, ist aber über die Tastatur nicht mehr
ansprechbar. Oder die Ausgabe des Programms findet den Weg zum
Bildschirm nicht mehr. Wenn nicht einmal ein ^
C mehr hilft,
können solche Prozesse bei einigen anderen Betriebssystemen nur durch
einen Reset des Rechners beendet werden. Bei Linux (oder Unix) kann im
Prinzip jeder Prozeß von einem anderen Terminal aus beendet
werden,
indem ihm mit dem kill-Kommando ein Signal zum Aufhören gesendet
wird. Das kill-Kommando kann jeder Anwender nur für seine
eigenen Prozesse benutzen. Nur die Superuserin kann alle Prozesse
''killen''.
Der drastische Ausdruck trifft nicht genau den Kern von kill, denn es gibt eine ganze Reihe von Signalen, die dem Prozeß, der sie erhält, nicht gleich das ganze Leben entziehen. Vielmehr können viele dieser Signale von den Programmen, die sie erhalten, `abgefangen' und sinnvoll bearbeitet werden. Um dem Benutzer (und dem Programm) die Möglichkeit einer differenzierten Reaktion zu geben, stehen für das kill-Kommando 23 verschiedene Signale zur Verfügung.
Das Standardsignal ist SIGTERM (15), die Aufforderung zu
terminieren. Andere häufig verwendete Signale sind SIGHUP (1),
das die Unterbrechung einer Terminalverbindung
signalisiert, oder SIGINT (2), das auch durch die
Tastenkombination CONTROL-C (^
C) erzeugt wird und in vielen Programmen von
einer Routine abgefangen wird.
In der Regel werden die Programme freiwillig'' die Bühne verlassen, wenn sie von kill ein solches Signal erhalten haben. Erst wenn das nichts mehr hilft, kann mit dem Signal SIGKILL (9) jeder (eigene) Prozeß ohne die Möglichkeit einer Reaktion beendet werden.
Das kill-Kommando benötigt natürlich in der Kommandozeile eine Identifikation des Prozesses, an den das Signal geschickt werden soll. Dazu kann jedes kill-Kommando die Prozeßnummer dieses Prozesses verarbeiten. Um diese Prozeßnummer ( PID) herauszubekommen, kann das ps-Kommando benutzt werden. Mit der Option ` -ax' zeigt es alle Prozesse mit ihren Prozeßnummern, den Terminals, falls sie noch kontrollierende Terminals haben, dem Status und dem Namen an.