Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/09/2010, à 16:02

Samb95

Lancer et fermer un programme python depuis un script bash

Bonjour à tous,

Voilà j'ai fait un programme python qui utilise des threads que je lance depuis un script bash. Cependant, mon problème est que lorsque le script bash se ferme, mon programme python continue de tourner.

Il faut savoir que mon script bash est lancé à partir d'un autre programme. Lorsque ce programme en question se termine, il termine également mon script bash mais mon programme python lui continue de tourner.

Est-ce que quelqu'un aurait une idée de comment je dois faire pour que je dise à mon script bash de terminer mon programme python lorsqu'il se ferme ?

Merci d'avance.

Hors ligne

#2 Le 07/09/2010, à 16:40

Totor

Re : Lancer et fermer un programme python depuis un script bash

Bonjour,

Samb95 a écrit :

[...]
Lorsque ce programme en question se termine, il termine également mon script bash mais mon programme python lui continue de tourner.[...]

Est-ce vraiment le programme qui termine le script bash ? Si oui, sais-tu quel signal il envoie au script bash ?

Peut-on voire le script bash s'il n'est pas trop confidentiel ? Car suivant le script, des méthodes différentes peuvent être utilisées.

Brut de fonderie, à mettre dans ton script bash :

trap killPython SIGTERM SIGKILL

killPython()
{
  # code pour arrêter le script Python via kill en utilisant soit le pid soit le n° de job...
}

Dernière modification par Totor (Le 07/09/2010, à 16:40)


-- Lucid Lynx --

Hors ligne

#3 Le 08/09/2010, à 08:35

Samb95

Re : Lancer et fermer un programme python depuis un script bash

Totor a écrit :

Bonjour,

Samb95 a écrit :

[...]
Lorsque ce programme en question se termine, il termine également mon script bash mais mon programme python lui continue de tourner.[...]

Est-ce vraiment le programme qui termine le script bash ? Si oui, sais-tu quel signal il envoie au script bash ?

Peut-on voire le script bash s'il n'est pas trop confidentiel ? Car suivant le script, des méthodes différentes peuvent être utilisées.

Brut de fonderie, à mettre dans ton script bash :

trap killPython SIGTERM SIGKILL

killPython()
{
  # code pour arrêter le script Python via kill en utilisant soit le pid soit le n° de job...
}

Bonjour,

Merci pour ta réponse. Voici le script bash :

#!/bin/bash

python -u /home/moi/collectd/etc/prog.py admin:/usr/logs/data/admin/log/log1 lac:/usr/logs/data/lac/log/log1 acq:/usr/logs/data/acq/log/log1 top:/usr/logs/data/top/log/log1 ghost:/usr/logs/data/gost/log/log1 deb:/usr/logs/data/deb/log/log1

Le programme qui lance et qui termine mon script bash s'appelle collectd. Je ne sais pas quel signal est envoyé pour terminé mon script mais je vais rechercher et je posterai si je trouve quelque chose de concret.

Sinon le code que tu as posté, il faut que je le mette à la fin de mon programme ?

Merci

Hors ligne

#4 Le 08/09/2010, à 08:51

Samb95

Re : Lancer et fermer un programme python depuis un script bash

J'ai trouvé le signal qui est envoyé par le programme pour terminer mon script est le signal SIGTERM.
J'ai implémenté dans mon programme python le fait qu'il s'arrête sur un "ctrl+c". Est-il possible d'envoyer un "ctrl+c" à mon programme Pyhton lorsque mon script bash reçoit le signal SIGTERM ?

Merci

Hors ligne

#5 Le 08/09/2010, à 09:02

Totor

Re : Lancer et fermer un programme python depuis un script bash

Samb95 a écrit :

Est-il possible d'envoyer un "ctrl+c" à mon programme Pyhton lorsque mon script bash reçoit le signal SIGTERM ?

Oui, tu envoies le signal SIGTERM !
C'est ce que je t'ai répondu la première fois. i.e utiliser "kill"

edit :
voilà qui devrait le faire

#!/bin/bash

pyPID=$$

trap killPython SIGTERM SIGKILL

killPython()
{
  kill ${pyPID}
}

python -u /home/moi/collectd/etc/prog.py admin:/usr/logs/data/admin/log/log1 lac:/usr/logs/data/lac/log/log1 acq:/usr/logs/data/acq/log/log1 top:/usr/logs/data/top/log/log1 ghost:/usr/logs/data/gost/log/log1 deb:/usr/logs/data/deb/log/log1 &
pyPID=$!
wait

Dernière modification par Totor (Le 08/09/2010, à 09:10)


-- Lucid Lynx --

Hors ligne

#6 Le 08/09/2010, à 09:34

Samb95

Re : Lancer et fermer un programme python depuis un script bash

Totor a écrit :
Samb95 a écrit :

Est-il possible d'envoyer un "ctrl+c" à mon programme Pyhton lorsque mon script bash reçoit le signal SIGTERM ?

Oui, tu envoies le signal SIGTERM !
C'est ce que je t'ai répondu la première fois. i.e utiliser "kill"

edit :
voilà qui devrait le faire

#!/bin/bash

pyPID=$$

trap killPython SIGTERM SIGKILL

killPython()
{
  kill ${pyPID}
}

python -u /home/moi/collectd/etc/prog.py admin:/usr/logs/data/admin/log/log1 lac:/usr/logs/data/lac/log/log1 acq:/usr/logs/data/acq/log/log1 top:/usr/logs/data/top/log/log1 ghost:/usr/logs/data/gost/log/log1 deb:/usr/logs/data/deb/log/log1 &
pyPID=$!
wait

Merci pour ton aide, je posterai plus tard pour dire si ça a marché, comme je ne peux pas tester actuellement smile

Hors ligne

#7 Le 08/09/2010, à 10:23

Samb95

Re : Lancer et fermer un programme python depuis un script bash

C'est tout bon ça fonctionne big_smile

Merci pour ton aide, c'est cool.

Hors ligne