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