[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: