2012-07-09 13:15:55 +0000 2012-07-09 13:15:55 +0000
19
19

Wie man ein Python-Skript, das kontinuierlich unter Linux läuft, manuell stoppt

Ich habe ein Python-Skript, das ausgeführt wird und kontinuierlich Fehler in eine Protokolldatei ausgibt.

Ich möchte das Skript bearbeiten und erneut ausführen, weiß aber nicht, wie ich das Skript stoppen kann.

Ich bin derzeit unter Linux über PuTTy eingeloggt und führe die gesamte Codierung dort durch. Gibt es also einen Befehl, um das Python-Skript unter Linux zu stoppen?

Antworten (6)

35
35
35
2012-07-09 13:19:39 +0000

Sie müssen die Prozess-ID (pid) finden. Ein Befehl dafür wäre

$> ps -ef

Um die Ergebnisse auf Python-Prozesse zu beschränken, können Sie das Ergebnis

$> ps -ef | grep python

grep verwenden, was Ergebnisse wie folgt liefert:

user 2430 1 0 Jul03 ? 00:00:01 /usr/bin/python -tt /usr/sbin/yum-updatesd

Die zweite Spalte ist die pid. Verwenden Sie dann den kill-Befehl wie folgt:

$> kill -9 2430 (i.e. the pid returned)
7
7
7
2016-05-25 10:23:16 +0000

Versuchen Sie diese einfache Zeile, sie wird alle script.py beenden:

pkill -9 -f script.py
7
7
7
2012-07-09 13:17:43 +0000

Suchen Sie die Prozess-ID (PID) des Skripts und geben Sie ein kill -9 PID ein, um den Prozess zu beenden, es sei denn, er läuft als Ihr Vordergrundprozess im Terminal; in diesem Fall können Sie ihn mit Strg-C beenden.

Finden Sie die PID mit diesem Befehl:

ps -elf | grep python

Es listet alle Python-Prozesse auf, suchen Sie den richtigen heraus und notieren Sie seine PID. Dann wird

kill -9 <whatever_the_PID_is>

den Prozess beenden. Möglicherweise erhalten Sie an dieser Stelle eine Meldung über das Beenden eines Prozesses.

Alternativ können Sie auch den Befehl top verwenden, um den Python-Prozess zu finden. Geben Sie einfach k (für kill) ein, und das Programm top wird Sie nach der PID des zu beendenden Prozesses fragen. Manchmal ist es schwierig, alle Prozesse, an denen Sie interessiert sind, mit top zu sehen, da sie möglicherweise über den Bildschirm scrollen, ich denke, der ps-Ansatz ist einfacher/besser.

4
4
4
2012-07-09 13:17:29 +0000

Wenn das Programm der aktuelle Prozess in Ihrer Shell ist, hält die Eingabe von Strg-C das Python-Programm an.

1
1
1
2014-07-15 17:16:12 +0000

In einer perfekten Welt würden Sie die Dokumentation für das Skript lesen und sehen, welche(s) Signal(e) verwendet werden sollte(n), um es zu beenden. Im wirklichen Leben wollen Sie dem Skript wahrscheinlich zuerst das TERM-Signal schicken, und vielleicht ein KILL-Signal verwenden, wenn es das TERM-Signal ignoriert. Was Sie also tun, ist, die Prozess-ID mit dem ps-Befehl zu finden (wie bereits jemand beschrieben hat). Dann können Sie kill -TERM <pid> ausführen. Einige Programme bereinigen Dinge, wie z.B. geöffnete Dateien, wenn sie ein solches Signal erhalten, daher ist es schöner, mit so etwas zu beginnen. Wenn das fehlschlägt, dann bleibt nicht viel übrig, außer dem großen Hammer: kill -KILL <pid>. (Sie können die numerischen Werte verwenden, z. B. -KILL = -9, und sie werden sich wahrscheinlich nie ändern, aber theoretisch ist es vielleicht sicherer, die Namen zu verwenden)

0
0
0
2015-03-25 11:03:19 +0000

Wenn Sie den Namen des Skripts kennen, können Sie die ganze Arbeit auf einen einzigen Befehl reduzieren:

ps -ef | grep "script_name" | awk '{print $2}' | xargs sudo kill

Wenn Sie sicherstellen wollen, dass es sich um ein Python-Skript handelt:

ps -ef | grep "python script_name" | awk '{print $2}' | xargs sudo kill

Wenn Sie alle Python-Skripte töten wollten:

ps -ef | grep "python" | awk '{print $2}' | xargs sudo kill

Ich nehme an, Sie verstehen die Idee ;)

Erinnerung: Sie müssen den Skriptnamen wie in den Beispielen in Anführungszeichen setzen.