Kill (Unix)


Kill (Unix)

kill (engl. töten) ist ein Unix-Kommando und gleichnamiger Systemaufruf, um unter dem Betriebssystem laufenden Prozessen Signale zu schicken. Standardmäßig wird dabei das Signal SIGTERM versendet, welches den entsprechenden Prozess dazu auffordert, sich zu beenden. Da das Beenden von Prozessen nur ein Anwendungsfall des Programms kill bzw. Systemaufrufes kill() ist, ist die Bezeichnung kill irreführend, da es sich lediglich um Interprozesskommunikation handelt.

Inhaltsverzeichnis

Funktionsweise

Der Unix-Befehl kill stellt nur einen Wrapper um den Betriebssystemaufruf kill() dar. Zwar ist es auf jedem Unix-Derivat als alleinstehende Anwendung vorhanden (üblicherweise unter /bin/kill), alle modernen Unix-Shells verfügen allerdings – aufgrund seiner trivialen Implementierung – über ein eingebautes kill-Kommando.

Mit kill können viele verschiedene Signale versendet werden[1], die am meisten benutzten Signale sind allerdings SIGTERM und SIGKILL. Ohne Angabe von Parametern versendet kill SIGTERM. Die empfangenden Programme können dieses Signal abfangen und vor dem Beenden noch unbedingt notwendige Arbeitsschritte durchführen, z. B. geöffnete Dateien abspeichern. SIGKILL wird verwendet, um einen Prozess, der sich trotz Empfang eines SIGTERM-Signals nicht beendet (z.B. weil er den Zustand eines Zombies erreicht hat), zu beenden. Neben dem Signal SIGSTOP ist SIGKILL daher das einzige Signal, welches vom Programm nicht „abgefangen“ werden kann, um programmspezifische Aktionen durchzuführen. Die zwei Signale SIGKILL und SIGSTOP werden demnach nur von dem Kernel „gesehen“ und bieten damit in jedem Fall zuverlässige Wege, einen Prozess zu kontrollieren. Während SIGKILL den Kernel anweist, den Prozess zu „töten“, pausiert der Kernel ihn mit SIGSTOP, bis das Signal SIGCONT empfangen wird.

Bei Unix als klassischem Mehrbenutzersystem hat jeder Prozess einen Inhaber (UID). Jeder Prozess darf nur ein Signal zu einem Prozess, der dem gleichen Inhaber gehört, versenden. Das heißt, dass jeder Benutzer auch nur seine eigenen Prozesse beenden darf. Ausgenommen ist der Superuser, welcher jedem Prozess auf dem System Signale schicken darf.

Verwendung

Der Syntax des Unix-Befehls lautet

kill Parameter eine oder mehrere Prozess-IDs

als optionaler Parameter kann das gewünschte Signal angegeben werden, in der Form -SIGNAL, wobei SIGNAL entweder der Signalnummer oder dem Namen entspricht.

Um beispielsweise einem fiktiven Prozess mit der ID 4711 das Signal SIGTERM zu schicken, gibt es drei mögliche Aufrufvarianten:

  • kill 4711
  • kill -TERM 4711
  • kill -15 4711

Analog geschieht der Aufruf mit anderen Signalen, z.B. SIGKILL:

  • kill -KILL 4711
  • kill -9 4711

Alternativen

Tastenkombinationen

Moderne Unix-Shells fangen Tastenkombinationen ab, um sie laufenden Vordergrundprozessen zu schicken. Um ein Programm zu beenden, reicht unter Unix so meist die Eingabe von Strg und C, welches dem Prozess ein SIGINT-Signal schickt. Üblicherweise wird durch die Eingabe von Strg+Z SIGTSTP versandt, ferner mit Strg+\ SIGQUIT, welches ein Programm dazu auffordert, einen Speicherauszug (core dump) auszugeben.

killall

Einige Unix-Derivate, unter anderem Solaris, rufen das Unix-Kommando killall automatisch auf, wenn das System runterfährt. Es verhält sich wie kill, nur wird ein Signal nicht nur zu einem einzigen Prozess geschickt, sondern zu allen Prozessen auf dem System.

Auf anderen Unix-Derivaten, u.a. IRIX, Linux und FreeBSD, wird das Kommando killall hingegen verwendet, um einen Prozess anhand seines Namens zu beenden. Um zum Beispiel XMMS, einen Mediaplayer, der per xmms aufgerufen wurde, zu beenden, gibt der Benutzer killall xmms ein. Auf diese Weise werden alle Prozesse mit dem Namen xmms beendet.

pkill

pkill beendet Prozesse anhand von Teilen ihres Namens. Das Kommando wurde in Solaris 7 eingeführt und wurde seitdem auch in Linux und OpenBSD implementiert. pkill ermöglicht es, Prozesse anhand ihres Namens einfacher zu beenden, als es mit killall möglich ist, wenn man deren genauen Namen nicht kennt.

Um zum Beispiel die dem Webbrowser Firefox zugehörigen Prozesse zu beenden, ohne sich dabei pkill sowie pgrep zu bedienen, müsste man eine Zeile wie kill `ps -ax | grep firefox| grep -v grep | awk '{print $1}'` schreiben, wohingegen mit pkill bereits die Eingabe von pkill firefox den Zweck erfüllt.

Einzelnachweise

  1. siehe Signal (Computer) für eine Liste der üblichen Signale

Siehe auch

  • xkill, zum Beenden von X-Window-Programmen

Weblinks


Wikimedia Foundation.

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Kill (Unix) — En informatique, kill est une commande de certains systèmes d exploitation (particulièrement Unix et ses dérivés) utilisée pour demander l arrêt d un processus en cours d exécution. Sommaire 1 Implémentations 2 Exemples 3 Voir aus …   Wikipédia en Français

  • kill (Unix) — kill (engl. töten) ist ein Unix Kommando und gleichnamiger Systemaufruf, um unter dem Betriebssystem laufenden Prozessen Signale zu schicken. Standardmäßig wird bei dem UNIX Kommando kill das Signal SIGTERM versendet, welches den entsprechenden… …   Deutsch Wikipedia

  • kill (Unix) — En informatique, kill est une commande de certains systèmes d exploitation (particulièrement Unix et ses dérivés) utilisée pour demander l arrêt d un processus en cours d exécution. Sommaire 1 Implémentations 2 Exemples 3 Voir aussi …   Wikipédia en Français

  • Kill (Unix) — In Unix and Unix like operating systems, kill is a command used to send simple messages to processes running on the system. By default, the message sent is the termination signal, which requests that the process exit. But kill is something of a… …   Wikipedia

  • Kill (disambiguation) — Kill might refer to: * Kill, to extinguish the life or cause the death of an organism, or the act of doing so. ** The verb form may also be a general use metaphor, synonymous with or * Kill (body of water), a creek, including in some United… …   Wikipedia

  • UNIX-Kommandos — Unix Systeme zeichnen sich durch eine Vielzahl von Kommandos aus, mit denen sich über eine Shell das Betriebssystem bedienen lässt. Die Syntax dieser Kommandos weicht unter den verschiedenen Systemen voneinander ab. Es existieren die beiden… …   Deutsch Wikipedia

  • Unix-Befehle — Unix Systeme zeichnen sich durch eine Vielzahl von Kommandos aus, mit denen sich über eine Shell das Betriebssystem bedienen lässt. Die Syntax dieser Kommandos weicht unter den verschiedenen Systemen voneinander ab. Es existieren die beiden… …   Deutsch Wikipedia

  • Unix-Kommando — Unix Systeme zeichnen sich durch eine Vielzahl von Kommandos aus, mit denen sich über eine Shell das Betriebssystem bedienen lässt. Die Syntax dieser Kommandos weicht unter den verschiedenen Systemen voneinander ab. Es existieren die beiden… …   Deutsch Wikipedia

  • Unix Kommandos — Unix Systeme zeichnen sich durch eine Vielzahl von Kommandos aus, mit denen sich über eine Shell das Betriebssystem bedienen lässt. Die Syntax dieser Kommandos weicht unter den verschiedenen Systemen voneinander ab. Es existieren die beiden… …   Deutsch Wikipedia

  • Kill — Kill  unix утилита, посылающая сигнал процессу. Содержание 1 Синтаксис 2 Описание 3 Параметры 4 Ссылки …   Википедия