Voila, j'ai un petit problème.
Je suis en train de faire un petit script qui se charge de lancer wine avec certains paramètres. le problème c'est que parfois wine fait un processus en arrière plan et le processus principal rend la main.
Du coup, mon script restaure les paramètres comme avant et wine ne s'execute pas là où il faudrait.
Alors, question: comment détecter lorsqu'un programme avec TOUS ses processus enfants se terminent ?
J'ai tenté en récupérant le processus de wine par $!, puis en testant si ps --pid $monpid donnait quelquechose et lorsque le processus se termine, quitter le script.
Mais le script se termine trop tôt.
Comment faire ..?
Merci pour les réponses
# meuh
Posté par gc (site web personnel) . Évalué à 3.
# man bash
Posté par Bruno Muller . Évalué à 1.
Attend que le processus indique se termine, et renvoie son code
de retour. n peut indiquer un PID, ou un job. S'il s'agit d'un
indicateur de job, on attendra la fin de tous les processus du
tube de ce job. Si n est omis, on attend la fin de tous les
processus fils actuellement actifs, et le code de retour sera
zéro. Si n se rapporte à un processus ou un job inexistant, le
code de retour sera 127. Dans tous les autres cas, le code de
retour sera celui du dernier processus ou job attendu.
[^] # Re: man bash
Posté par Lucas . Évalué à 1.
[^] # Re: man bash
Posté par Bruno Muller . Évalué à 0.
Donc je persiste et je signe :)
[^] # Re: man bash
Posté par gc (site web personnel) . Évalué à 3.
Le processus lanceur va finir, ton wait va finir par la même occasion.
[gc@meuh /tmp] ruby -e 'sleep 10; puts "detaching"; fork or exec %q(ruby -e "puts %q(detached); sleep 10; puts %q(finishing detached process)")' &
[1] 18578
[gc@meuh /tmp] wait `ps --ppid $$ | grep ruby | cut -d\ -f1`; echo "wait finished"
detaching
wait finished
[gc@meuh /tmp] detached
finishing detached process
Tu vois que lorsque le processus lanceur fait un fork, lance un autre processus, et se termine, le wait est terminé par la même occasion.
Au passage, ma solution invoquée plus haut (utilisation de ps --ppid) déconne aussi, parce qu'en fait le parent du wine n'est plus le shell mais init (je ne me rappelais plus de ce comportement - lorsque le parent finit c'est init qui reprend la parenté, je pensais que ça passait au grand-parent).
Hum ma seule solution au problème d'origine, se débrouiller pour savoir quel est le PID du processus arrière-plan. Je ne vois pas d'autre solution là.
[^] # Re: man bash
Posté par Stéphane GENEIX . Évalué à 1.
enfin je dis ca, mais g pas regardé la doc de bash..
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.