GNU/Linux >> Tutoriels Linux >  >> Linux

Comment tuer le script python avec le script bash

Vous pouvez utiliser le ! pour obtenir le PID de la dernière commande.

Je suggérerais quelque chose de similaire à ce qui suit, qui vérifie également si le processus que vous souhaitez exécuter est déjà en cours d'exécution :

#!/bin/bash

if [[ ! -e /tmp/test.py.pid ]]; then   # Check if the file already exists
    python test.py &                   #+and if so do not run another process.
    echo $! > /tmp/test.py.pid
else
    echo -n "ERROR: The process is already running with pid "
    cat /tmp/test.py.pid
    echo
fi

Ensuite, quand vous voulez le tuer :

#!/bin/bash

if [[ -e /tmp/test.py.pid ]]; then   # If the file do not exists, then the
    kill `cat /tmp/test.py.pid`      #+the process is not running. Useless
    rm /tmp/test.py.pid              #+trying to kill it.
else
    echo "test.py is not running"
fi

Bien entendu si le kill doit avoir lieu quelque temps après le lancement de la commande, vous pouvez tout mettre dans le même script :

#!/bin/bash

python test.py &                    # This does not check if the command
echo $! > /tmp/test.py.pid          #+has already been executed. But,
                                    #+would have problems if more than 1
sleep(<number_of_seconds_to_wait>)  #+have been started since the pid file would.
                                    #+be overwritten.
if [[ -e /tmp/test.py.pid ]]; then
    kill `cat /tmp/test.py.pid`
else
    echo "test.py is not running"
fi

Si vous voulez pouvoir exécuter plus de commandes avec le même nom simultanément et pouvoir les tuer de manière sélective, une petite modification du script est nécessaire. Dis-moi, je vais essayer de t'aider !

Avec quelque chose comme ça, vous êtes sûr de tuer ce que vous voulez tuer. Commandes comme pkill ou grepping le ps aux peut être risqué.


Utilisez pkill commande en tant que

pkill -f test.py

(ou) une manière plus infaillible en utilisant pgrep pour rechercher l'ID de processus réel

kill $(pgrep -f 'python test.py')

Ou si plus d'une instance du programme en cours d'exécution est identifiée et qu'elles doivent toutes être tuées, utilisez killall(1) sous Linux et BSD

killall test.py 

Linux
  1. Comment déboguer un script bash ?

  2. Comment dockeriser les applications Python avec Miniconda

  3. Comment ajouter automatiquement un compte utilisateur ET un mot de passe avec un script Bash ?

  4. Comment passer des paramètres à un script Bash ?

  5. nom de base avec des espaces dans un script bash ?

Comment écrire un script bash avec des exemples

Comment exécuter une commande Shell avec Python

Comment créer des documents avec des scripts Bash

Comment exécuter un script Python en PHP

Comment exécuter un script bash

Comment installer Python 2.7 sur CentOS 7.1 ou 6.7 avec Anaconda