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 27/03/2010, à 14:33

Ensareab

[Résolu] : [Bash] Attendre la fin d'un processus

Salut à tous,

J'ai installé Band in a Box, un logiciel tournant sous Wine. C'est un logiciel audio qui nécessite un serveur MIDI. Aussi, pour fonctionner, il faut lancer timidity en serveur avant, et le couper après.

Plutôt que de me taper le lancement / arrêt de timidity chaque fois, j'ai pensé faire un script qui :
1- Lance Timidity
2- Lance band in a box (bbw.exe)
3- Attend que l'utilisateur ferme band in a box (fermeture de bbw.exe)
4- Tue Timidity

Voici ce que j'ai fait jusqu'à maintenant :

# Lancement de Timidity en serveur
     nohup timidity -iA -B2,8 -Os -EFreverb=0 &

# Lancement de Wine
     wine "C:\bandinabox2007\bbw.exe"

# Attente de la fin de bbw.exe
     ????

# Et fermeture de timidity
     sudo killall timidity.exe

Comme vous pouvez le voir, je ne sais pas comment attendre, et détecter la fermeture de bbw.exe par l'utilisateur, avant de couper timidity.

Auriez-vous une idée pour m'aider ?

Merci ! smile

Dernière modification par Ensareab (Le 28/03/2010, à 11:54)


Acer Aspire 4935 - Intel Core 2 Duo 2.0GHz - 3Go DDR2 Ram
Kubuntu 10.10 - Maverick Meerkat

Hors ligne

#2 Le 27/03/2010, à 15:36

geenux

Re : [Résolu] : [Bash] Attendre la fin d'un processus

Tu n'as rien à faire pour attendre, à moins que wine ne se lance automatiquement en processus séparé (?), tu as essayé comme tu as fait.
La lecture d'un script bash se fait commande après commande, donc tant que la commande précédente n'est pas finie, la suivante n'est pas lancée.

Hors ligne

#3 Le 27/03/2010, à 16:10

Ensareab

Re : [Résolu] : [Bash] Attendre la fin d'un processus

Oui cela se fait commande après commande, mais ici ma commande c'est "lancer band in a box", et non pas "lancer et attendre qu'on le ferme".
Donc une fois que celui-ci est lancé, la commande de fermeture de timidity se lance également.


Acer Aspire 4935 - Intel Core 2 Duo 2.0GHz - 3Go DDR2 Ram
Kubuntu 10.10 - Maverick Meerkat

Hors ligne

#4 Le 27/03/2010, à 17:11

geenux

Re : [Résolu] : [Bash] Attendre la fin d'un processus

Ok, donc wine lance les processus en arrière plan.
Dans ce cas, il va falloir faire régulièrement des tests pour savoir si le processus est toujours en cours d'exécution ou non.
Quelque chose de ce style

# Lancement de Timidity en serveur
     nohup timidity -iA -B2,8 -Os -EFreverb=0 &

# Lancement de Wine
     wine "C:\bandinabox2007\bbw.exe"

# Attente de la fin de bbw.exe
while [ $(pgrep "bbw.exe") != "" ];do
     sleep 5
done

# Et fermeture de timidity
     sudo killall timidity.exe

pgrep est une commande qui recherche un processus, et renvoit son pid.

Hors ligne

#5 Le 27/03/2010, à 17:25

AnsuzPeorth

Re : [Résolu] : [Bash] Attendre la fin d'un processus

Bjr,
Plutot qu'une boucle, lancer dans un sous process avec wait, à essayer ... !

# Lancement de Timidity en serveur
     nohup timidity -iA -B2,8 -Os -EFreverb=0 &

# Lancement de Wine
(
     wine "C:\bandinabox2007\bbw.exe"
     wait
)
# Attente de la fin de bbw.exe
     ????

# Et fermeture de timidity
     sudo killall timidity.exe

Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#6 Le 27/03/2010, à 20:25

nesthib

Re : [Résolu] : [Bash] Attendre la fin d'un processus

j'étais parti pour proposer de surveiller le process avec inotify (/proc/${PID}/) mais il semble qu'inotify ne prenne pas en compte les pseudo-fichiers.
Voici une solution moins satisfaisante mais qui devrait néanmoins être fonctionnelle.

la_commande_à_surveiller
PID=$!

while [ -d /proc/${PID} ]
do
   echo 'waiting'
    sleep 2
done
echo 'commande de fin'

bon du coup ça perd un peu de son intérêt…


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#7 Le 28/03/2010, à 00:12

toto2006

Re : [Résolu] : [Bash] Attendre la fin d'un processus

c'est spe smile

car chez moi

wine notepad  
echo "fin"

attend que je quitte notepad pour écrire fin !

Hors ligne

#8 Le 28/03/2010, à 11:54

Ensareab

Re : [Résolu] : [Bash] Attendre la fin d'un processus

Hello tout le monde,
Merci pour vos nombreuses réponses.
Alors la remarque de toto2006 m'a fait me pencher sur la question...

En fait, quand je lançait wine, je redirigeait les erreurs vers un log, mais je me plantais car je mettais "2&>1" au lieu de "2>&1". Ceci changé, la console attend bien que le programme soit fermé pour continuer le script, je ne sais pas comment ça se fait !!

Problème résolu, donc, par une simple erreur d'inattention de ma part ! tongue


Acer Aspire 4935 - Intel Core 2 Duo 2.0GHz - 3Go DDR2 Ram
Kubuntu 10.10 - Maverick Meerkat

Hors ligne

#9 Le 28/03/2010, à 12:22

geenux

Re : [Résolu] : [Bash] Attendre la fin d'un processus

C'est simple à comprendre comment ça se faisait. Le symbole « & » signifie, dans la plupart des cas qu'il faut lancer le processus séparément, et donc on passe à la commande suivante.
Si tu fait wine argument1 2&>..., ça sera interprété comme « wine argument1 2 & »
Alors que si tu fais wine argument1 2>&1, seul argument 1 sera passé à wine, 2>&1 signifiant rediriger la sortie d'erreur.

Hors ligne