Ich starte ein Programm im Terminal, mit dem ich nicht entkommen kann Ctrl- Cund das ich töten möchte. Wie finde ich die PID?
Ich starte ein Programm im Terminal, mit dem ich nicht entkommen kann Ctrl- Cund das ich töten möchte. Wie finde ich die PID?
Antworten:
Öffnen Sie ein anderes Terminal und führen Sie es aus, ps ax | grep foo
wobei foo der Name des nicht reagierenden Programms ist. Dies sollte eine Ausgabezeile zurückgeben, die ungefähr so aussieht:
$ ps ax | grep firefox
2222 ? S 0:00 /bin/sh /usr/lib/firefox-3.6.9/firefox
2231 ? Sl 514:36 /usr/lib/firefox-3.6.9/firefox-bin
30290 pts/2 S+ 0:00 grep --color=auto firefox
Das erste Feld jeder Ausgabezeile ist eine Zahl, die die Prozess-ID des Programms darstellt, zu dem eine Übereinstimmung besteht grep
(Sie können die letzte ignorieren, die sich grep
selbst darstellt).
kill pid
Gehen Sie wie folgt vor, um den fehlerhaften Prozess anzuhalten :
Dabei steht pid für die Prozess-ID des Programms. Sie müssen möglicherweise Ihr Urteil darüber treffen, welche der Übereinstimmungen bearbeitet werden müssen kill
, oder Sie können top
stattdessen verwenden. Die Verwendung kill
von selbst sendet SIGTERM, das Sie zuerst versuchen sollten, da es dem Programm ermöglicht, ordnungsgemäß nach sich aufzuräumen. Wenn SIGTERM fehlschlägt, versuchen SIGHUP, die stonger Medizin ist: kill -HUP pid
. Wenn alles andere fehlschlägt, senden Sie SIGKILL. Sie sollten dies jedoch nur als letzten Ausweg tun, da SIGKILL den Kernel dazu veranlasst, den Prozess sofort abzubrechen, ohne dass eine Bereinigung möglich ist. Dies kann manchmal zu Datenbeschädigungen oder anderen Problemen führen. Senden Sie SIGKILL also nur als letzten Ausweg. Um dies zu tun, tue kill -KILL pid
oder kill -9 pid
.
Wenn Sie eine grafische Benutzeroberfläche verwenden, müssen Sie sich natürlich nicht mit diesem verrückten Befehlszeilen-Zeugs herumschlagen, um die Arbeit zu erledigen. Öffnen Sie einfach "System Monitor", navigieren Sie zur Registerkarte "Prozesse", wählen Sie den Prozess aus, den Sie anhalten möchten (Hm, könnte dies der Prozess mit 90% CPU sein?), Und klicken Sie mit der rechten Maustaste darauf. Da der Prozess bereits gestoppt ist (das ist das Problem, oder?), Wählen Sie im daraufhin angezeigten Menü Prozess beenden oder Prozess beenden.
kill -9
ist schlechter Rat. Ich habe die Antwort bearbeitet, um sie zu korrigieren.
ping
Befehl und enthält sleep
. Laut unix.stackexchange.com/a/275826/72988 ist dies in Ubuntu ohne nicht möglich multiplexer
.
Ich glaube nicht, dass so lange Befehle erforderlich sind, wenn Sie dieselben Befehle mit pgrep, pkill, pidof usw. ausführen können.
pgrep:
pgrep [options] pattern
BESCHREIBUNG: pgrep durchsucht die aktuell ausgeführten Prozesse und listet die Prozess-IDs auf, die den Auswahlkriterien für stdout entsprechen. Alle Kriterien müssen übereinstimmen. Zum Beispiel,
Um einen Prozess namens sshd zu finden, der root gehört.
$ pgrep -u root sshd
Listen Sie die Prozesse auf, die dem Root-OR-Daemon gehören.
$ pgrep -u root,daemon
pidof:
BESCHREIBUNG :
Pidof findet die Prozess-IDs (Pids) der genannten Programme. Diese IDs werden auf der Standardausgabe gedruckt.
Syntax: pidof Programmname
Um ein Programm mit pid zu beenden, verwenden Sie das Beispiel pkill:
pkill pid
pkill -f process_name
pkill -o process_name
pkill -n process_name
pkill -l process_name
-f
flag: Durchsucht das Flag process_name (siehe man pkill)
-o
: Wählen Sie nur den ältesten der übereinstimmenden Prozesse aus.
-n
flag: Wählen Sie nur den neuesten der übereinstimmenden Prozesse aus.
-l
flag: Listet den Prozessnamen sowie die Prozess-ID auf.
Der einfachste Weg, die PID eines laufenden Programms zu ermitteln, ist:
pidof <application name>
Zum Beispiel, wenn Sie vim gestartet haben und dessen pid wissen wollen:
pidof vim
Denken Sie daran, dass Sie den genauen Programmnamen angeben müssen, der gestartet wurde.
Wenn Sie beispielsweise vi ausführen und ausführen, erhalten pidof vim
Sie keine korrekten Ergebnisse.
pidof
Weitere Informationen finden Sie in der Bedienungsanleitung.
pidof mysqld
gibt eine PID zurück. Wenn ich jedoch pidof Mariadb
nichts eingebe, wird nichts zurückgegeben. Ist es die gleiche PID für MariaDB und MySQL?
Ich habe festgestellt, dass es nützlich ist, bei der Suche nach Groß- und Kleinschreibung das "-i" einzufügen und "aux" anstelle von "ax" zu verwenden, um eine aussagekräftigere Ausgabe zu erhalten:
ps aux | grep -i firefox
Wenn Sie alle Prozesse beenden möchten, die Sie verwenden können:
ps aux | grep -i firefox | awk {'print $2'} | xargs kill -9
Das ist eine gewaltsame Tötung. Lass die "-9" fallen, wenn du einen Soft Kill willst.
ps aux | grep -i firefox...
Prozess ab, da dieser den Text firefox
in seinem Befehl enthält!
grep -i firefo[x]
, um nur Firefox entsprechen
Für diejenigen , Ubuntu 16.04 LTS läuft, Sie müssen verwenden ps ax
und nicht nurps
in der Befehlszeile, sonst werden Sie nur die Prozesse erhalten aus dem jeweiligen Endgerät Instanz Laichen , die Sie in. ( In der Regel nur ‚bash‘ [die Shell Sie sind in ] und 'ps' [was du gerade gelaufen bist])
ps -e
(zeigt alles) und ps -ejH
(zeigt einen Prozessbaum).
Sie können auch ein anderes Terminal öffnen (oder zu einem anderen Terminal wechseln) und ausführen. Dies top
ist im Grunde eine Textversion des Systemmonitors. In der ersten Spalte wird die PID jedes laufenden Prozesses aufgeführt. Sie können diese beenden, indem Sie drücken K, die PID eingeben und dann ein zu sendendes numerisches Signal eingeben.
Du könntest es tun:
ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9
Die ersten beiden Pipes erhalten Prozessinformationen. Als Nächstes versuchen wir, die PID-Spalte mithilfe des Old-School-Schnitts zu ermitteln. Anschließend geben wir die resultierende PID zum Töten an.
kill -9
ist die größte Waffe, die Sie einen Prozess töten müssen. Sie sollten zunächst ein sanfteres Signal versuchen, bevor Sie auf SIGKILL zurückgreifen, um dem Prozess die Möglichkeit zu geben, seine Ressourcen zu bereinigen.