[Shell] fork et &

fork et & [Shell] - Shell/Batch - Programmation

Marsh Posté le 29-07-2008 à 17:22:33    

Bonjour,
 
 
J'aimerais savoir si le command & (pour mettre en background) équivaut au final à un fork en C qui va dupliquer le processus ?
 
 
Merci.

Reply

Marsh Posté le 29-07-2008 à 17:22:33   

Reply

Marsh Posté le 29-07-2008 à 18:18:48    

Tout appel à un programme externe en shell est un fork.  
La seule différence entre une commande lancée avec '&' et sans, c'est que dans le premier cas le shell n'attend pas le retour du processus fils.
 
Exemple : je lance un "sleep" de une minute en arrière-plan, avec '&'. Puis je lance un ptree sur le PID courant ("$$" == PID courant) sans '&' et, comme le montre ptree lui-même, il est au même niveau que le sleep :

$ sleep 60 &
[1] 3486
$ ptree $$
165   /usr/sbin/inetd -s
  25367 in.rlogind
    25369 -csh
      25379 bash
        3486  sleep 60
        3487  ptree 25379

Reply

Marsh Posté le 29-07-2008 à 18:32:36    

Tonio94 a écrit :

Bonjour,
 
 
J'aimerais savoir si le command & (pour mettre en background) équivaut au final à un fork en C qui va dupliquer le processus ?
 
 
Merci.


 
Ben en fait, quand ton shell reçoit l'ordre d'exécuter un programme, il commence par dupliquer son code (fork()) et c'est le coté fils qui va exécuter le programme pendant que le père attend la fin.
Et comme l'a dit Elmoricq, si tu rajoutes "&", alors le père n'attend plus.


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 31-07-2008 à 14:08:52    

Merci à tous les deux pour ces réponses intéressantes :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed