töten (Befehl) - kill (command)
| Originalautor(en) | AT&T Bell Laboratories |
|---|---|
| Entwickler | Verschiedene Open-Source- und kommerzielle Entwickler |
| Erstveröffentlichung | Februar 1973 |
| Betriebssystem | Unix , Unix-like , Plan 9 , Inferno , OS-9 , Windows , ReactOS , Singularity , IBM i |
| Plattform | Plattformübergreifend |
| Typ | Befehl |
In Computing , killist ein Befehl , der in mehreren populären verwendet wird Betriebssysteme zu senden Signale an laufende Prozesse .
Implementierungen
Unix und Unix-like
In Unix und Unix-ähnlichen Betriebssystemen killist ein Befehl, der verwendet wird, um ein Signal an einen Prozess zu senden . Standardmäßig ist die gesendete Nachricht das Beendigungssignal , das den Prozess zum Beenden auffordert . Aber töten ist eine falsche Bezeichnung; das gesendete Signal hat möglicherweise nichts mit Prozessabbruch zu tun. Der killBefehl ist ein Wrapper um den Systemaufruf , der Signale an Prozesse oder Prozessgruppen auf dem System sendet, die durch ihre numerischen Prozess-IDs (PIDs) oder Prozessgruppen- IDs (PGIDs) referenziert werden. wird immer als eigenständiges Dienstprogramm gemäß der Definition des POSIX- Standards bereitgestellt . Die meisten Shells verfügen jedoch über eingebaute Befehle, die sich geringfügig davon unterscheiden können.
kill() kill kill
Es gibt viele verschiedene Signale, die gesendet werden können (siehe Signal für eine vollständige Liste), obwohl die Signale, an denen Benutzer im Allgemeinen am meisten interessiert sind, SIGTERM ("terminate") und SIGKILL ("kill") sind. Das gesendete Standardsignal ist SIGTERM. Programme, die dieses Signal verarbeiten, können vor dem Beenden nützliche Bereinigungsoperationen durchführen (z. B. Konfigurationsinformationen in einer Datei speichern). Viele Programme implementieren jedoch keinen speziellen Handler für dieses Signal, weshalb stattdessen ein Standard-Signalhandler aufgerufen wird. Manchmal ist sogar ein Prozess mit einem speziellen Handler so schief gelaufen, dass er das Signal nicht richtig verarbeiten kann.
Alle Signale außer SIGKILL und SIGSTOP ("stop") können vom Prozess "abgefangen" werden, d. h. eine spezielle Funktion kann aufgerufen werden, wenn das Programm diese Signale empfängt. Die beiden Ausnahmen SIGKILL und SIGSTOP werden nur vom Kernel des Hostsystems gesehen und bieten zuverlässige Möglichkeiten, die Ausführung von Prozessen zu steuern. SIGKILL beendet den Prozess und SIGSTOP hält ihn an, bis ein SIGCONT ("weiter") empfangen wird.
Unix bietet Sicherheitsmechanismen, um zu verhindern, dass unbefugte Benutzer andere Prozesse beenden. Damit ein Prozess ein Signal an einen anderen senden kann, muss der Eigentümer des Signalisierungsprozesses im Wesentlichen derselbe wie der Eigentümer des empfangenden Prozesses oder der Superuser sein .
Die verfügbaren Signale haben alle unterschiedliche Namen und sind bestimmten Nummern zugeordnet. Es ist wichtig zu beachten, dass die spezifische Zuordnung zwischen Zahlen und Signalen zwischen Unix-Implementierungen variieren kann. SIGTERM wird oft mit 15 nummeriert, während SIGKILL oft mit 9 nummeriert ist.
Beispiele
Einem Prozess kann auf vier Arten ein SIGTERM- Signal gesendet werden (die Prozess-ID lautet in diesem Fall '1234'):
kill 1234
kill -s TERM 1234
kill -TERM 1234
kill -15 1234
Dem Prozess kann auf drei Arten ein SIGKILL- Signal gesendet werden:
kill -s KILL 1234
kill -KILL 1234
kill -9 1234
Andere nützliche Signale umfassen HUP, TRAP, INT, SEGV und ALRM. HUP sendet das SIGHUP- Signal. Einige Daemons, einschließlich Apache und Sendmail , lesen Konfigurationsdateien beim Empfang von SIGHUP erneut ein, daher kann der Befehl kill auch dafür verwendet werden. Ein SIGINT- Signal kann in den meisten Unix-Shells sehr einfach durch Drücken von CTRL+C erzeugt werden . Es ist auch üblich, dass + auf SIGTSTP ("terminal stop") und + (Backslash) auf SIGQUIT abgebildet wird , was ein Programm zwingen kann, einen Core-Dump durchzuführen . CTRLZCTRL\
Verwandte Programme
-
killall - Bei einigen Unix-Varianten wie Solaris wird dieses Dienstprogramm automatisch aufgerufen, wenn das System heruntergefahren wird . Es verhält sich ähnlich wie der obige Befehl kill, aber anstatt ein Signal an einen einzelnen Prozess zu senden, wird das Signal an alle Prozesse im System gesendet. Auf anderen wie IRIX , Linux und FreeBSD wird jedoch ein Argument bereitgestellt, das den Namen des Prozesses (oder der Prozesse) angibt, der beendet werden soll. Um beispielsweise einen Prozess wie eine Instanz des von aufgerufenen XMMS- Musikplayers zu beenden
xmms, würde der Benutzer den Befehl ausführenkillall xmms. Dies würde alle Prozesse mit dem Namenxmmsbeenden und entspricht denenkill `pidof xmms`auf Systemen wie Solaris. -
pkill - signalisiert Prozesse basierend auf Namen und anderen Attributen. Es wurde in Solaris 7 eingeführt und wurde seitdem für Linux, NetBSD und OpenBSD neu implementiert . pkill macht Prozesse aufgrund ihres Namens viel bequemer zu töten: zB einen Prozess namens zu töten firefox ohne pkill (und ohne pgrep ), würde man eingeben müssen
kill `ps --no-headers -C firefox -o pid`mit pkill während, kann man einfach eingebenpkill firefox. - xkill - wenn ohne Parameter aufgerufen, ändert sich der Mauszeiger von einem Pfeil zu einem "x"-Symbol, und der Benutzer kann auf ein Fenster klicken, um den X-Server zu zwingen, die Verbindung mit dem Client zu schließen, der das Fenster besitzt. Dies führt häufig dazu, dass der Prozess beendet wird, wenn er erkennt, dass seine Verbindung zum X-Server geschlossen wurde.
Microware OS-9
Der killBefehl ist auch als integrierte Shell in der OS-9- Shell verfügbar . Es wird verwendet, um einen anderen Prozess anhand der Prozess-ID zu beenden.
Beispiel
Stoppen Sie den Prozess mit der Prozess-ID „7“:
$ kill 7
Microsoft Windows und ReactOS
In Microsoft Kommandozeilen - Interpreter Windows Powershell , killist ein vordefinierter Befehl Alias für das Stop-Process Cmdlet .
Microsoft Windows XP , Vista und 7 enthalten den Befehl taskkillzum Beenden von Prozessen. Die übliche Syntax für diesen Befehl ist taskkill /im "IMAGENAME". Eine "nicht unterstützte" Version von killwar in mehreren Versionen der für Windows 98 verfügbaren Microsoft Windows Resource Kits enthalten .
GNU- Versionen von killwurden über Cygwin portiert und laufen innerhalb des Unix-Umgebungs-Subsystems, das Microsoft Windows Services for UNIX bereitstellt (Microsoft erwarb Windows Services for Unix Wholesale über den Kauf von Softway Systems und deren Interix- Produkt am 17. September 1999).
Die ReactOS- Implementierung basiert auf der Windows-Variante. Es wurde von Andrew Riedi, Andrew Nguyen und He Yang entwickelt. Es ist unter der GPLv2.1 oder höher lizenziert .
Beispiele
Finden Sie alle Prozesse, die mit dem Buchstaben "p" beginnen, die von Microsoft entwickelt wurden und mehr als 10 MB Speicher verwenden, und beenden Sie sie:
PS C:\> ps p* | where { $_.Company -like "Microsoft*" -and $_.WorkingSet -gt 10MB } | kill -confirm
Confirm
Are you sure you want to perform this action?
Performing operation "Stop-Process" on Target "powershell (6832)".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): A
PS C:\>
Hier ist ein einfacheres Beispiel, das den Prozess Explorer.exe zum Beenden auffordert:
PS C:\> taskkill /im explorer.exe
Dieses Beispiel erzwingt die Beendigung des Prozesses:
PS C:\> taskkill /f /im explorer.exe
Prozesse können auch durch ihre PID-Nummer beendet werden :
PS C:\> taskkill /pid 3476
Microsoft-Singularität
Singularity-Shell , die Standard-Shell für das Mikrokernel- Betriebssystem von Microsoft Research Singularity enthält einen Befehl zum Beenden von Hintergrundprozessen.
kill
Beispiele
Stoppen Sie den Prozess mit dem Namen "SampleProcess":
Singularity>kill SampleProcess
Stoppen Sie den Prozess mit der Prozesskennung "42":
Singularity>kill 42
Plan 9 von Bell Labs
Unter Plan 9 von Bell Labs führt das Kill-Programm diese Beendigung nicht durch und benötigt auch keine Prozess-IDs. Stattdessen nimmt es die tatsächlichen Namen der Prozesse und gibt die Befehle für rc aus , die Shell, die von Plan 9 verwendet wird, um den Prozess zu beenden.
Ein ähnlicher bereitgestellter Befehl heißt slay, der dasselbe tut, jedoch für Prozesse, die sich weigern, auf diese Weise beendet zu werden.
Beispiele
Um beispielsweise alle Instanzen von troff zu beenden , gibt man Folgendes ein:
kill troff | rc
Andere
Der Befehl kill wurde auch auf das Betriebssystem IBM i portiert .
Siehe auch
Verweise
Weiterlesen
- McElhearn, Kirk (2006). Die Mac OS X-Befehlszeile: Unix unter der Haube . John Wiley & Söhne . ISBN 978-0470113851.
Externe Links
- Befehl: – Commands & Utilities Reference, The Single UNIX Specification , Ausgabe 7 von The Open Group
- Systemaufruf: – System Interfaces Reference, The Single UNIX Specification , Issue 7 von The Open Group
- – Plan 9 Programmierhandbuch, Band 1
- – Inferno Allgemeine Befehle Handbuch
- – Handbuch für Linux- Benutzerbefehle