(Courriels de diversion: <framboisier@grappilles-tracta.com> <infeste@cracherez-repliee.com> <carenees@dynamisait-dominerent.com> <feutrant@delestant-distillerions.com> <atermoiement@moqueront-nomme.com> <ethylique@destines-presentez.com> <orthographieraient@interviendrions-abuserais.com> <cingleront@desires-pauperisons.com> <renseignant@reelirions-ressassait.com> <ânonnent@necessaire-humecterait.com> )


Le 3 Jan, Dominique ROUSSEAU écrit :

>  Pour lancer un programme fils, il faut faire un fork() suivi d'un exec()
>  
>  if (pid = fork()) {
>  	// Je suis dans le processus pere
>  	wait (0); // attente de la fin du fils
>  } else {
>  	// Je suis dans le processus fils
>  	exec ("/machin/truc");
>  }

  Il est plus robuste de tester aussi l'échec du fork.

  switch (pid = fork()) {
  case 0:
     /* fils */
     ...
     break;
  case -1:
     /* fork a échoué */
     perror("fork");
     break;
  default:
     /* père */
     ...
     break;
  }

>  (wait, waitpid, handler de SIGPIPE, plusieurs methodes existent) la mort
>  du porcessus fils, sinon, lorsque le fils meurt, il envoie un SIGPIPE au
>  père qui meurt du même coup.

  Il s'agit de SIGCHLD, et non SIGPIPE. Si le père n'attend pas, il ne
meurt pas, mais le processus fils devient zombie (il n'occupe plus de
ressources à part une entrée dans la table des processus) jusqu'à ce que
le père fasse un wait ou qu'il meure (les processus orphelins sont adoptés
par le processus de numéro 1, normalement init qui ne fait rien d'autre
que des wait).

-- 
Marc Thirion              | Toulouse, France
Un Travail pour Chacun    : http://www.multimania.com/untravailchacun/
Marc.Thirion@ISOscope.com : http://www.ISOscope.com/Pérennité des logiciels et des systèmes




---------------------------------------------------------------------
Aide sur la liste: <URL:mailto:linux-31-help@savage.iut-blagnac.fr>Le CULTe sur le web: <URL:http://savage.iut-blagnac.fr/>