Manuelles Stoppen eines Python-Skripts, das kontinuierlich unter Linux ausgeführt wird

19

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 anhalten soll.

Ich bin derzeit über PuTTy unter Linux angemeldet und mache dort die gesamte Codierung. Gibt es einen Befehl, um das Python-Skript unter Linux zu stoppen?

Gunnar
quelle

Antworten:

35

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

$> ps -ef

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

$> ps -ef | grep python

was zu Ergebnissen führt wie:

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 Befehl kill als solchen:

$> kill -9 2430 (i.e. the pid returned)
olly_uk
quelle
Genau das habe ich gesucht. Vielen Dank
7

Suchen Sie die Prozess-ID (PID) des Skripts und geben Sie ein aus kill -9 PID, um den Prozess abzubrechen, es sei denn, es wird als forground-Prozess auf dem Terminal ausgeführt. In diesem Fall können Sie mit Strg-C das Skript abbrechen.

Finden Sie die PID mit diesem Befehl:

ps -elf | grep python

Es listet alle Python-Prozesse auf, wählt den richtigen aus und notiert seine PID. Dann

kill -9 <whatever_the_PID_is>

bricht den Prozess ab. Möglicherweise erhalten Sie eine Meldung, dass Sie einen Vorgang zu diesem Zeitpunkt abgebrochen haben.

Alternativ können Sie den topBefehl verwenden, um den Python-Prozess zu finden. Geben Sie einfach k(for kill) ein und das topProgramm fordert Sie auf, die PID des zu tötenden Prozesses einzugeben . Manchmal ist es schwierig, alle Prozesse zu sehen, an denen Sie interessiert sind, topda sie möglicherweise vom Bildschirm verschwinden. Ich denke, der psAnsatz ist einfacher / besser.

Levon
quelle
4
Nun, bevor -9ich es benutze , würde ich es zuerst "sanft" töten. Nur wenn es nicht reagiert, würde ich verwenden -9.
glglgl
Nicht vertraut mit dem Begriff "
Levon
7

Probieren Sie diese einfache Zeile aus, sie beendet alle script.py:

pkill -9 -f script.py
T-Rex
quelle
1
Dies ist viel besser als die manuelle Suche nach der PID, wenn der Skriptname eindeutig ist.
FlippingBinary
4

Wenn das Programm der aktuelle Prozess in Ihrer Shell ist, wird das Python-Programm durch Eingabe von Strg-C gestoppt.

Ned Batchelder
quelle
Tolle Lösung, brauchte dies zum Testen.
Kuzon
1

In einer perfekten Welt würden Sie die Dokumentation für das Skript lesen und sehen, mit welchen Signalen das Skript beendet werden soll. Im wirklichen Leben möchten Sie ihm wahrscheinlich zuerst das TERM-Signal senden, möglicherweise mithilfe eines KILL-Signals, wenn das TERM ignoriert wird. Sie finden die Prozess-ID also mit dem Befehl ps (wie bereits beschrieben). Dann kannst du rennen kill -TERM <pid>. Einige Programme bereinigen Dinge, wie Dateien, die sie möglicherweise geöffnet haben, wenn sie ein solches Signal erhalten. Es ist also besser, mit so etwas zu beginnen. Wenn das nicht funktioniert, dann gibt es nicht mehr viel übrig außer dem großen Hammer zu tun: kill -KILL <pid>. (Sie können die numerischen Werte verwenden, z. B. -KILL = -9, und sie werden sich wahrscheinlich nie ändern. Theoretisch ist es jedoch sicherer, die Namen zu verwenden.)

jrl
quelle
0

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

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

Wenn Sie sicherstellen möchten, dass es sich um ein Python-Skript handelt, gehen Sie wie folgt vor:

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 du kommst auf die idee;)

Erinnerung: Sie müssen den "" Skriptnamen wie in den Beispielen angeben.

Jesus
quelle