#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 !
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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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
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 !
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