Tuez le processus en utilisant son nom dans linux (Python)

Cela fonctionne, mais il tue tous les processus Python.

pkill python 

Cependant, je ne peux pas faire:

 pkill myscript.py 

J’ai aussi essayé le killall , mais sans succès non plus. Dois-je utiliser des expressions régulières?

En passant, je veux le faire dans un script python avec import os.

Avez-vous lancé le sous-processus Python à partir du même script à partir duquel vous le tuez? Si oui, consultez cette question pour plus de détails. Sinon, vous pouvez utiliser l’option -f de pkill pour rechercher le nom du script dans la liste d’arguments du processus Python, mais vous courez toujours le risque de tuer quelque chose que vous n’aviez pas l’intention de faire. Voir la page de manuel pour plus d’informations.

Êtes-vous en mesure de faire en sorte que le processus écrive son pid dans un fichier?
En Python, vous obtenez le pid comme ceci:

 import os os.getpid() 

Tuer par son nom est pratique, mais a parfois des conséquences indésirables, comme vous l’avez vu.

sudo kill -9 `pgrep python`

Cette commande va tuer tous les processus python en cours d’exécution

vous devez rechercher l’ID de processus (pid). Vous pouvez utiliser la commande “ps -A | grep NAME” et ensuite appliquer “kill -9 PID”. Ces commandes peuvent facilement être traduites en python.

Essayer d’utiliser un “nom” (comme dans pkill) peut générer plusieurs correspondances et donc des résultats inattendus (du moins dans le contexte défini ci-dessus dans la question).

Essaye ça:

 echo '#!/usr/bin/env python' > myscript cat myscript.py >>myscript chmod +x myscript ./myscript 

Bien sûr, vous devrez changer le code pour tuer un processus nommé “myscript”. Sur les systèmes UNIX, un fichier exécutable contient quelques octets au début, indiquant au système d’exploitation le format binary utilisé. Si les deux premiers octets sont #! le système d’exploitation suppose alors qu’il s’agit en réalité d’un fichier texte pouvant être exécuté par un autre programme, et que le système d’exploitation charge l’autre programme et lui transmet le fichier texte.

Dans ce cas, j’aurais probablement pu écrire #!/usr/bin/python sur la première ligne, mais si votre python est dans /usr/local/bin , cela ne fonctionnerait pas. Au lieu de cela, j’utilise env pour le faire rechercher votre chemin normal pour python. Tous les systèmes UNIX ont env dans / usr / bin. Pour un peu plus d’informations, vous pouvez saisir man env .