Re: un petit script
Question ... ma foi ... de fort beau gabarit :o)
Bon alors, petit rappel (1). Quand on demande au shell
d'exécuter une commande externe (un binaire), il
forke, puis son fils invoque l'appel système
exec("commande"). Ce dernier lui permet de substituer
en mémoire le code de "commande" à son propre code. A
la fin on se retrouve avec 2 processus : le shell
(père), commande (fils)
petit rappel (2) : un pipe (nommé ou pas) est un moyen
génial de faire communiquer plusieurs processus. Par
exemple, quand il n'y a aucun processus qui a ouvert
le pipe en lecture, un processus qui l'ouvre en
écriture se voit bloqué jusqu'à ce l'autre bout soit
ouvert. Plusieurs mécanismes comme celui-ci permettent
de bien synchroniser la communication.
Grâce à ces deux rappels je pense pouvoir expliquer ce
qui ce passe :
- tu lances signature.sh
- celui-ci essaye d'exécuter fortune : il forke et ...
en fait il n'effectue pas encore le "exec(fortune)"
car le mécanisme des pipes le bloque. (je pense
qu'il n'y a aucun programme qui essaye de lire ton
tube nommé)
On se retrouve donc avec un script shell qui c'est
forké, d'où le résultat de la commande ps.
Un indice m'a permis de suivre ce raisonnement :
ps -l -u user donne :
000 S 1000 8426 755 0 60 0 - 571 wait4
pts/2 00:00:00 signature.sh
040 S 1000 8427 8426 0 60 0 - 571 fifo_o
pts/2 00:00:00 signature.sh
signification du premier champ du process 8427 (man
ps) :
"FORKNOEXEC 040 forked but didn't exec"
Voilà, @+ .
Antoine Ameurlain
ameurlain@yahoo.fr
___________________________________________________________
Do You Yahoo!? -- Un e-mail gratuit @yahoo.fr !
Yahoo! Courrier : http://fr.mail.yahoo.com
Reply to: