Ein Absturzkurs, um Befehlszeilen- / Textmodusprogramme zu beenden
Um den Kommentar von @ AFH näher zu erläutern: Wenn "SRM" ein Konsolenprogramm (Befehlszeilenschnittstelle) ist und Sie es von einem Terminal aus ausgeführt haben, klicken Sie einfach darauf Ctrl-z
, da das Terminal den Vordergrundprozess sendet, der dieses SIGSTOP
Signal verwaltet und sendet in den hintergrund. Sie können es dann durch Ausführen des fg
Shellbefehls "zurückbringen" - es ist Teil der sogenannten "Jobsteuerung", die durch interaktive Shells implementiert wird, und bedeutet, den Hintergrundprozess in den Vordergrund zu rücken (daher "fg"). Dazu gehört auch das Senden des Prozesses SIGCONT
Signal unter anderem.
Natürlich, um einen Prozess einfach zu stoppen, stoppen Sie ihn. Auf Unix-y-Systemen, einschließlich Linux-basierter Betriebssysteme, wird dies durch Senden eines der speziellen Signale des Prozesses gesendet - normalerweise SIGTERM
oder SIGINT
. Wenn Sie Ctrl-c
auf ein Terminal treffen, das einen Prozess ausführt, wird das SIGINT
Signal gesendet. Das kill
Programm kann verwendet werden, um willkürliche Prozesse beliebige Signale zu senden.
Das Problem bei der Verwendung kill
ist, dass der Benutzer für die meisten seiner Verwendungszwecke die sogenannte "PID" des Prozesses kennen muss, an den das Signal gesendet werden soll. PID ist eine P rocess ID entifier-ein ganze Zahl ≥ 1 einzigartig über alle Prozesse, die gegenwärtig vom Betriebssystem verwaltet.
Die Jobsteuerung der Shell macht es einfacher, da sie über bestimmte Mnemonics verfügt, um auf die verwalteten Prozesse zu verweisen: Wenn Sie den aktuell aktiven Prozess durch Anklicken im Hintergrund ausführen Ctrl-z
, können Sie mit dem jobs
Befehl die Liste der von dieser Shell verwalteten Prozesse anzeigen. Zum Beispiel habe ich gerade eine Instanz angehalten mutt
und jobs
danach ausgeführt; hier ist was ich sehe:
~$ jobs [1]+ Stopped mutt
Beachten Sie dieses [1]+
bisschen. Dies 1
ist die Jobkennung, die diesem Prozess von der Shell zugewiesen wurde. Das +
ist ein "Handle", um auf den letzten Hintergrundprozess zu verweisen.
Sie können also entweder %1
oder %+
mit dem kill
Befehl verwenden, um auf diesen Prozess zu verweisen, wie in
$ kill %1
oder
$ kill %+
… Und sie werden alle SIGTERM
zu diesem einzigen Hintergrundprozess senden .
So können Sie ein schlecht funktionierendes Konsolenprogramm beenden.
Mehr zu SingalsBeachten Sie, dass diese SIGINT
und SIGTERM
Signale von dem Prozess "behandelt" werden können, von dem einer von ihnen empfangen wurde. Dadurch kann der Prozess vor dem Beenden bestimmte Bereinigungsaktionen durchführen.
Manchmal kann ein Prozess jedoch "hängen" - beispielsweise durch Ausführen einer Endlosschleife auf einer CPU aufgrund eines Programmierfehlers oder durch Stoppen, indem versucht wird, eine Datei auf einer "toten" Ressource zu lesen oder zu schreiben, z. B. eine getrennte Netzwerkfreigabe. In diesen Fällen kann SIGINT
oder SIGTERM
kann der Prozess normalerweise nicht "abgewickelt" werden.
Für solche Fälle gibt es ein spezielles Signal, SIGQUIT
dem eine bekannte Nummer "9" zugewiesen ist. Durch Senden eines Prozesses wird dieses Signal lediglich dazu gezwungen, den Prozess zwangsweise abzubremsen, ohne dass er eingreifen kann. Deshalb haben Sie diese kill -9 $pid
Encantation höchstwahrscheinlich in einigen Dokumenten gesehen.
Andere Optionen
Natürlich gibt es auch andere Möglichkeiten.
Erstens gibt es "benutzerfreundliche" Programme, htop
die Ihnen eine durchsuchbare Liste der laufenden Prozesse bieten und es Ihnen ermöglichen, jedem von ihnen ein beliebiges Programm zu senden.
Grafische Desktop-Umgebungen wie GNOME, XFCE, KDE und andere bieten normalerweise eine GUI-App, die das Gleiche tut.
Zweitens gibt es mehr "hackige" Wege, um mit fehlerbehafteten Prozessen umzugehen, wenn diese "Task-Manager" nicht verfügbar sind oder aus irgendeinem Grund nicht der Rechnung entsprechen. Hier sind einige davon in keiner bestimmten Reihenfolge:
Das
xkill
Dienstprogramm (bei Debian und seiner Ableitung befindet sich imx11-utils
Paket) zeigt bei der Ausführung einen diagonalen, kreuzförmigen Cursor, mit dem Sie ein beliebiges Fenster durch Klicken auswählen undxkill
den Prozess, der dieses Fenster besitzt, zwangsweise von dem Programm trennen X-Server (das Programm, das alle Ihre GUI darstellt).Die Wirkung dieser Aktion unterscheidet sich zwischen den Prozessen. Wenn Sie jedoch
xkill
ein Terminalfenster verwenden, sendet es dasSIGHUP
Signal an die von ihm verwalteten Prozesse, und dies führt normalerweise zum Abbruch.Das
pkill
Dienstprogramm (auf Debian und seiner Ableitung befindet sich improcps
Paket) kann verwendet werden, um ein Signal an eine Reihe von Prozessen zu senden, deren Name mit einer bestimmten Zeichenfolge übereinstimmt.Wenn Sie einen
srm
Prozess beenden möchten, von dem Sie wissen, dass er auf Ihrem System ausgeführt wird, können Sie ihn ausführen$ pkill -9 srm
um alle srm
auf dem System laufenden Prozesse herunterzufahren .