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?
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)
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.
Essayez cette simple ligne, elle mettra fin à tous les script.py
:
pkill -9 -f script.py
Si le programme est le processus en cours dans votre shell, tapez Ctrl-C pour arrêter le programme Python.
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)
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.