Wenn sich ein Prozess nicht mehr richtig verhält, möchte man ihn manchmal beenden oder abschießen. In diesem Beitrag werden wir einige Möglichkeiten erkunden, wie man einen Prozess oder eine Anwendung sowohl von der Kommandozeile als auch von einer grafischen Oberfläche aus beenden kann, wobei wir gedit als Beispielanwendung verwenden.
Verwendung von Kommandozeilen-/Terminierungszeichen
Strg + C
Ein Problem beim Aufrufen von gedit
von der Kommandozeile aus (wenn Sie nicht gedit &
verwenden) besteht darin, dass es die Eingabeaufforderung nicht freigibt, so dass die Shell-Sitzung blockiert wird. In solchen Fällen ist die Tastenkombination Strg+C (die Strg-Taste in Kombination mit ‚C‘) sehr hilfreich. Damit wird gedit
beendet und alle Arbeit geht verloren (es sei denn, die Datei wurde gespeichert). Strg+C sendet das Signal SIGINT
an gedit
. Dies ist ein Stoppsignal, dessen Standardaktion das Beenden des Prozesses ist. Es weist die Shell an, gedit
zu stoppen und zur Hauptschleife zurückzukehren, und Sie erhalten die Eingabeaufforderung zurück.
$ gedit
^C
Strg + Z
Dies wird ein Suspend-Zeichen genannt. Es sendet ein SIGTSTP
Signal an den Prozess. Dies ist auch ein Stoppsignal, aber die Standardaktion ist nicht das Töten, sondern das Suspendieren des Prozesses.
Es stoppt (kill/terminate) gedit
und kehrt zum Shell-Prompt zurück.
$ gedit
^Z
+ Stopped gedit
$
Sobald der Prozess suspendiert ist (in diesem Fall gedit
), ist es nicht möglich, etwas in gedit
zu schreiben oder zu tun. Im Hintergrund wird der Prozess zu einem Job. Dies kann mit dem Befehl jobs
überprüft werden.
$ jobs
+ Stopped gedit
jobs
ermöglicht es Ihnen, mehrere Prozesse innerhalb einer einzigen Shell-Sitzung zu steuern. Sie können Jobs anhalten, fortsetzen und je nach Bedarf in den Hintergrund oder in den Vordergrund verschieben.
Lassen Sie uns gedit
im Hintergrund fortsetzen und eine Eingabeaufforderung zur Ausführung anderer Befehle freigeben. Dazu verwenden Sie den Befehl bg
, gefolgt von der Job-ID (beachten Sie in der Ausgabe von
jobs
oben. ist die Job-ID).
$ bg 1
+ gedit &
Das ist ähnlich wie das Starten von gedit
mit &,
:
$ gedit &
Die Verwendung von kill
kill
erlaubt eine feine Kontrolle über Signale, die es Ihnen ermöglichen, einen Prozess zu signalisieren, indem Sie entweder einen Signalnamen oder eine Signalnummer angeben, gefolgt von einer Prozess-ID oder PID.
Was ich an kill
mag, ist, dass es auch mit Job-IDs arbeiten kann. Starten wir gedit
im Hintergrund mit gedit &
. Angenommen, ich habe eine Job-ID von gedit
aus dem jobs
-Befehl, senden wir SIGINT
an gedit
:
$ kill -s SIGINT %1
Beachten Sie, dass der Job-ID %
vorangestellt werden sollte, sonst betrachtet kill
sie als PID.
kill
kann auch ohne explizite Angabe eines Signals funktionieren. In diesem Fall ist die Standardaktion das Senden von SIGTERM
, was den Prozess beendet. Führen Sie kill -l
aus, um alle Signalnamen aufzulisten, und verwenden Sie den Befehl man kill
, um die Manpage zu lesen.
Verwendung von killall
Wenn Sie keine Job-ID oder PID angeben wollen, können Sie mit killall
einen Prozess mit seinem Namen angeben. Der einfachste Weg, gedit
mit killall
zu beenden, ist:
$ killall gedit
Damit werden alle Prozesse mit dem Namen gedit
beendet. Wie kill
ist das Standardsignal SIGTERM
. Es gibt die Möglichkeit, Groß- und Kleinschreibung zu ignorieren, indem man -I
verwendet:
$ gedit &
14852
$ killall -I GEDIT
+ Terminated gedit
Um mehr über die verschiedenen Flags zu erfahren, die killall
zur Verfügung stellt (wie z.B. -u
, das es erlaubt, benutzereigene Prozesse zu beenden), lesen Sie die Manpage (man killall
)
Verwenden von xkill
Sind Sie jemals auf ein Problem gestoßen, bei dem ein Mediaplayer, wie z.B. VLC, ausgegraut oder aufgehängt wurde? Jetzt können Sie die PID finden und die Anwendung mit einem der oben aufgeführten Befehle beenden oder xkill
verwenden.
xkill
ermöglicht Ihnen, ein Fenster mit der Maus zu beenden. Führen Sie einfach xkill
in einem Terminal aus, wodurch sich der Mauszeiger in ein x oder ein kleines Totenkopfsymbol verwandeln sollte. Klicken Sie auf das x in dem Fenster, das Sie schließen wollen. Seien Sie jedoch vorsichtig mit xkill
– wie die Manpage erklärt, kann es gefährlich sein. Sie wurden gewarnt!
Weitere Informationen finden Sie auf der Manpage des jeweiligen Befehls. Sie können auch Befehle wie pkill
und pgrep
untersuchen.