web-dev-qa-db-fra.com

Comment arrêter manuellement un script Python qui tourne en permanence sur Linux

J'ai un script Python en cours d'exécution qui sauvegarde continuellement les erreurs dans un fichier journal.

Je souhaite modifier le script et l'exécuter à nouveau, mais je ne sais pas comment arrêter le script.

Je suis actuellement connecté à Linux via PuTTY et j'effectue tout le codage ici. Alors, y a-t-il une commande pour arrêter le script python sous linux?

15
Gunnar

Vous devrez trouver l'identifiant du processus (pid). une commande à faire serait

$> ps -ef

pour limiter les résultats aux processus python, vous pouvez grep le résultat

$> ps -ef | grep python

qui donnera des résultats comme:

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

la deuxième colonne est le pid. utilisez ensuite la commande kill en tant que telle:

$> kill -9 2430 (i.e. the pid returned)
33
olly_uk

Recherchez l'ID de processus (PID) du script et émettez un kill -9 PID pour tuer le processus, sauf s'il est exécuté en tant que processus forground sur le terminal, auquel cas vous pouvez utiliser Contrl-C pour le tuer.

Trouvez le PID avec cette commande:

ps -elf | grep python

Il répertorie tous les processus python, choisit le bon et note son PID. ensuite

kill -9 <whatever_the_PID_is>

va tuer le processus. Vous pouvez recevoir un message indiquant qu’il a mis fin à un processus à ce stade.

Vous pouvez également utiliser la commande top pour rechercher le processus python. Entrez simplement k (pour tuer) et le programme top vous demandera le PID du processus à tuer. Il est parfois difficile de voir tous les processus qui vous intéressent avec top car ils risquent de défiler à l'écran, je pense que l'approche ps est plus facile/meilleure.

7
Levon

Essayez cette simple ligne, elle mettra fin à tous les script.py:

pkill -9 -f script.py
5
trex

Si le programme est le processus en cours dans votre shell, tapez Ctrl-C pour arrêter le programme Python.

3
Ned Batchelder

Dans un monde parfait, vous devriez lire la documentation du script et voir quels signaux doivent être utilisés pour lui dire de se terminer. Dans la vraie vie, vous voudrez probablement lui envoyer le signal TERM, d’abord en utilisant peut-être un signal KILL s’il ignore le terme TERM. Vous devez donc rechercher l'ID de processus à l'aide de la commande ps (comme déjà décrit). Ensuite, vous pouvez exécuter kill -TERM <pid>. Certains programmes nettoient des choses, comme les fichiers qu'ils ont éventuellement ouverts, quand ils reçoivent un tel signal, il est donc plus agréable de commencer par quelque chose comme ça. Si cela échoue, alors il ne reste plus grand chose à faire à part le gros marteau: kill -KILL <pid>. (vous pouvez utiliser les valeurs numériques, par exemple -KILL = -9, et elles ne changeront probablement jamais, mais dans un sens théorique, il pourrait être plus sûr d'utiliser les noms)

1
jrl

Si vous connaissez le nom du script, vous pouvez réduire tout le travail à une seule commande:

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

Si vous voulez vous assurer qu'il s'agit d'un script Python:

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

Si vous vouliez tuer tous les scripts python:

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

Je suppose que tu as l'idée;)

Rappel: vous devez "" citer le nom du script tel quel dans les exemples.

0
Jesus