Accéder au contenu.
Menu Sympa

technique - Re: [TECH] pipes

Objet : Liste pour les discussions techniques (liste à inscription publique)

Archives de la liste

Re: [TECH] pipes


Chronologique Discussions 
  • From: theo <theocrite AT theocrite.org>
  • To: APRIL Liste Technique <technique AT april.org>
  • Subject: Re: [TECH] pipes
  • Date: Mon, 12 Apr 2010 11:29:39 +0200

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Lionel Allorge wrote:
> Bonjour,

Bonjour Lionel,


> Une petite question technique sur les pipes.
>
> J'utilise le programme "ps aux" pour vérifier si un programme tourne
> actuellement sur mon pc. Et j'ajoute un pipe avec grep pour trouver un
> programme spécifique ce qui donne par exemple pour firefox :
>
>> ps aux | grep firefox
>
> Or si firefox n'est pas lancé il me répond :
>> 23027 0.0 0.0 4112 812 pts/1 S+ 10:46 0:00 grep firefox
>
> Comment ce fait-il que le programme "ps" voit le programme "grep" alors que
> celui-ci ne devrait être lancé qu'après que "ps" ai rendu la main ?
> Ou alors, dans une suite d'instructions liées par des pipes, tous les
> programmes sont-ils lancé en même temps ?

Ils sont en effet lancés en même temps (ou plutôt en très léger décalage).

Si les pipes étaient lancés séquentiellement, ça poserait des problèmes
de performances. Par exemple, un
grep /motif/ /fichier/ | less
n'afficherait rien tant que le grep ne serait pas terminé. Si le grep
est long, il vaut mieux pouvoir commencer à utiliser le less avant qu'il
se termine.

Par ailleurs ça nécessiterait de stocker tout le résultat avant de
l'envoyer au prochain processus. Ce qui nécessiterait beaucoup de
ressources s'il fallait stocker plusieurs Go dans un coin avant de le
passer au programme suivant (les pipes ont une taille limitée à quelques
Ko).

Dans le cas du ps pipé, le grep n'apparait pas à chaque fois. Il y a ce
qu'on appelle une race condition (En général utilisé pour les effet
pervers des cas non déterministes où le résultat varie de manière non
prévisible selon la vitesse d'exécution de différentes parties).

Ce que ps fait, c'est de lister les processus en allant lire les
informations dans /proc. Ça prend un certain temps. Or, si le grep
apparait dans /proc avant que ps n'ait fini de lister les processus, il
se retrouvera listé lui aussi.

Si tu ne veux pas voir le grep lui même, tu peux utiliser pgrep par
exemple :
pgrep -lf firefox

Ou encore utiliser un contournement du genre :
ps aux | grep [f]irefox
ou
ps aux | grep firefox | grep -v grep

- --
librement,
theo

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iQEcBAEBAgAGBQJLwugCAAoJECkgngj8k9Tvy50H/2lSqAhNLpMZSIF/vd8aBkG9
TpfjXb4f9xvFgFGTybtBXODaoyOb9bhgsNht1qzpzVU7e3TJr5g7w7BY4L3/NUZD
AKkEezr0c5CdizYOl7H8Q9/qxFkgZK6mJASruYUrsDvBv8NpWPP4yG1ln5MUs1ec
EjZmBqQtCKe1o85cRC+S95d/qkIFP32G87TpAVEU1Qy127ZnZhzhJkaknEJhbKm6
6hV1lJSGcrJ6uybljqGw2i/fcbHHGLp8UcCBXZxhGeJ+ggwX4cHyA0IxMod35NTq
pvUsXlEXZRHpFrExx/+CA1R5D4TFkP67puBCuH1nBVGuFllGEETi7cqR/Mn4jBM=
=LKZb
-----END PGP SIGNATURE-----




Archives gérées par MHonArc 2.6.16.

Haut de le page