Processus sous unix

atefensi Messages postés 9 Date d'inscription lundi 5 juin 2006 Statut Membre Dernière intervention 14 octobre 2006 - 14 oct. 2006 à 17:10
mad_love_disease Messages postés 64 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 1 juillet 2010 - 18 oct. 2006 à 13:46
Je veux vous poser quelque question sur les processus sous unix
J’ai le programme suivant
Main()
{ int i=0 ;
If(fork()==0)
{
i=1 ;
Exit(i) ;
i=2 ;
}
Printf(“%d”,i);
}
If va afficher que i =0 et se rend pas compte de I du processus fils
Et surtout j’ai pas compris pourquoi il n’affiche pas i=1


Le 2eme pb c’est ce programme
Main()
{
Int i, n=0 ;
For(i=1;i<4;i++)
{
If(fork()!=0)
{
N=i;
}
Printf(“%d”,n);
Pourquoi il parcours l’arbre de façon ascendante en affichant la valeur de n
Pourquoi il n’affiche pas au fur et a mesure la valeur de n en descendant dans l’arbre
Et pourquoi si on  remplace if (fork() !=0) par if (fork()==0)
Il parcourt l’arbre de façon descendante et affiche au fur et a mesure n


Le troisième problème consiste a
Utiliser exec(v,vp,l,lp) avec d’autre instructions exemple
Printf  ,il n’affiche pas le résultat de printf uniquement celui de execv
Pour d’autre commande comme read write dup… ses commandes seront exécutes  que s’ils sont écrites avant exec
Sinon ils seront ignorés  pourquoi ??????


 

1 réponse

mad_love_disease Messages postés 64 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 1 juillet 2010 3
18 oct. 2006 à 13:46
Main()
{
    int i=0 ;
    If(fork()==0)
    {
        i=1 ;
        Exit(i) ;
        i=2 ;
    }
    Printf(?%d?,i);
}

pour le pere, la variable i=0 car la variable i est locale, elle n'est pas commune aux deux processus (le pere et le fils). Elles s'apellent toutes les deux i mais sont locales au père et au fils respectivement. Déclare la en globale (attention ce n'est pas terrible) et encore ce n'est pas sur que ca marche car le pere peut executer la commande printf avant que le fils n'est assigné la valeur 1 à la variable i. donc met un sleep(quelquechose) avant l'affichage.

int i ;
Main()

{

    If(fork()==0)

    {

        i=1 ;

        Exit(i) ;

        i=2 ;

    }

    Printf(?%d?,i);
}

Mad_Love_Disease
0
Rejoignez-nous