PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Forums Hébergement > Forum Serveur - Sécurité et techniques > fr.comp.os.unix > Attendre son enfant
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
fr.comp.os.unix Système UNIX.

Attendre son enfant

Réponse
 
LinkBack Outils de la discussion
Vieux 08/02/2007, 17h21   #1
Ph. Ivaldi
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Attendre son enfant

Bonjour,

Existe-t-il un moyen pour forcer un processus père à ne se terminer que
lorsqu'un hypothétique processus enfant est terminé ?
J'ai tenté:
* `commande` mais ça pose des problèmes en cas de sortie sur
stdout.
* echo `commande` mais du coup je perds le code erreur de retour (et
j'en ai besoin).
* `commande 1>&2` qui ne marche pas mieux.

Note: ces commandes sont lancées depuis (X)Emacs (dans un environnement
Bash) qui s'obstine à tuer les enfants dès que le père se termine.
--
Merci de votre attention,
Philippe Ivaldi.
http://piprim.tuxfamily.org/
  Réponse avec citation
Vieux 08/02/2007, 17h44   #2
Stephane Chazelas
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Attendre son enfant

2007-02-08, 18:21(+01), Ph Ivaldi:
> Bonjour,
>
> Existe-t-il un moyen pour forcer un processus père à ne se terminer que
> lorsqu'un hypothétique processus enfant est terminé ?
> J'ai tenté:
> * `commande` mais ça pose des problèmes en cas de sortie sur
> stdout.
> * echo `commande` mais du coup je perds le code erreur de retour (et
> j'en ai besoin).
> * `commande 1>&2` qui ne marche pas mieux.
>
> Note: ces commandes sont lancées depuis (X)Emacs (dans un environnement
> Bash) qui s'obstine à tuer les enfants dès que le père se termine.


{ empty=`command 3>&1 >&4 4>&-`; } 4>&1


--
Stéphane
  Réponse avec citation
Vieux 08/02/2007, 17h55   #3
David LE BOURGEOIS
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Attendre son enfant

Le 08/02/2007 à 17:21:46, Ph Ivaldi a écrit :
> Bonjour,


Bonsoir.

> Existe-t-il un moyen pour forcer un processus père à ne se terminer que
> lorsqu'un hypothétique processus enfant est terminé ?


$ cat pere
../fils & PID=$!
printf "waiting (pid %d) ... " "$PID"
wait "$PID"
printf "done ($?)\n"

$ cat fils
sleep 3
exit 42

$ ./pere
waiting (pid 6215) ... done (42)

--
David LE BOURGEOIS
e-mail : david.lebourgeois (at) free.fr
jabber : david.lebourgeois (at) jabber.fr
  Réponse avec citation
Vieux 08/02/2007, 18h08   #4
Stephane Chazelas
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Attendre son enfant

2007-02-08, 17:55(+00), David LE BOURGEOIS:
> Le 08/02/2007 à 17:21:46, Ph Ivaldi a écrit :
>> Bonjour,

>
> Bonsoir.
>
>> Existe-t-il un moyen pour forcer un processus père à ne se terminer que
>> lorsqu'un hypothétique processus enfant est terminé ?

>
> $ cat pere
> ./fils & PID=$!
> printf "waiting (pid %d) ... " "$PID"
> wait "$PID"
> printf "done ($?)\n"
>
> $ cat fils
> sleep 3
> exit 42
>
> $ ./pere
> waiting (pid 6215) ... done (42)


Oui mais:

$ cat enfant
sleep 10 & exit 12
$ cat pere
../enfant
$ ./pere
$ ps
....sleep...

Je crois que c'est ce que l'OP voulait dire, d'ou l'utilisation
d'un pipe pour attendre tous les "writers".

$ cat pere-correcte
{ blah=`./enfant 3>&1 >&4 4>&-`; } 4>&1
echo "exit status de enfant: $?"
$ time ./pere
exit status de enfant: 12
....10 seconds...

--
Stéphane
  Réponse avec citation
Vieux 08/02/2007, 18h47   #5
Michel Talon
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Attendre son enfant

Ph. Ivaldi <piv_pasde@pub_tele2.fr> wrote:
> Bonjour,
>
> Existe-t-il un moyen pour forcer un processus père à ne se terminer que
> lorsqu'un hypothétique processus enfant est terminé ?
> J'ai tenté:
> * `commande` mais ça pose des problèmes en cas de sortie sur
> stdout.
> * echo `commande` mais du coup je perds le code erreur de retour (et
> j'en ai besoin).
> * `commande 1>&2` qui ne marche pas mieux.


`commande > /dev/null 2>&1 || cas d'erreur`
Si la commande renvoie une erreur, ce qui est aprés le || est exécuté.
Donc ça remplit toutes les conditions que tu veux.


--

Michel TALON

  Réponse avec citation
Vieux 08/02/2007, 19h29   #6
Stephane Chazelas
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Attendre son enfant

2007-02-8, 18:47(+00), Michel Talon:
> Ph. Ivaldi <piv_pasde@pub_tele2.fr> wrote:
>> Bonjour,
>>
>> Existe-t-il un moyen pour forcer un processus père à ne se terminer que
>> lorsqu'un hypothétique processus enfant est terminé ?
>> J'ai tenté:
>> * `commande` mais ça pose des problèmes en cas de sortie sur
>> stdout.
>> * echo `commande` mais du coup je perds le code erreur de retour (et
>> j'en ai besoin).
>> * `commande 1>&2` qui ne marche pas mieux.

>
> `commande > /dev/null 2>&1 || cas d'erreur`
> Si la commande renvoie une erreur, ce qui est aprés le || est exécuté.
> Donc ça remplit toutes les conditions que tu veux.

[...]

Non, en redirigeant le stdout de commande vers /dev/null, tu
perds la connection au pipe. Donc, `...` perd son effet
d'attendre tous les eventuels fils de "commande" qui ont un fd
ouvert en ecriture sur le pipe.

`sh -c 'sleep 10 &'`

se termine apres 10 seconds.

`sh -c 'sleep 10 &' > /dev/null`

se termine instantanement.

--
Stéphane
  Réponse avec citation
Vieux 08/02/2007, 22h01   #7
Michel Talon
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Attendre son enfant

Stephane Chazelas <cette.adresse@est.invalid> wrote:
> se termine apres 10 seconds.
>
> `sh -c 'sleep 10 &' > /dev/null`
>
> se termine instantanement.
>


Et oui, tu as raison, comme toujours. N'empêche que ceci
traîne bien 5s avant de retourner:
`sleep 5 > /dev/null`
et ça pareil
sh -c 'sleep 5 > /dev/null'


--

Michel TALON

  Réponse avec citation
Vieux 09/02/2007, 08h34   #8
Ph. Ivaldi
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Attendre son enfant

Le 08 février 2007 à 18h44:15,
Stephane Chazelas <cette.adresse@est.invalid> écrivit :

> { empty=`command 3>&1 >&4 4>&-`; } 4>&1


Exactement ce que je cherche.
Merci!
--
Philippe Ivaldi.
http://piprim.tuxfamily.org/
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 20h10.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 3,58852 seconds with 16 queries