Programmation des processus sous unix

Description

le programme que vous avez entre vos mains est déstiné aux débutants dans la programmation systeme des processus sous unix,car c'est le meilleur environnement pour ce genre de programmation et sa gestion de processus etant simple et puissante.
ce programme consiste à créer un processus qui affiche son pid ,son etat,et crée un processus fils,puis s'endort.pendant ce temps le fils se branche à un nouveau programme(prog) grace à execl,affiche son ppid,son pid,et son propre etat avant de se terminer.
A son reveil,le processus pere examinera le pid de son fils ,aprés avoir lu le code de retour de wait.
pour le traitement j'ai utilisé simplement des messages car mon objectif c'est de donner une idée générale sur les processus,vous pouvez les remplacer par d'autres instructions.
le code source de fichier executable "prog" se trouve dans le fichier prog.c que je l'ai compilé,puis copier à partir de fichier a.out vers le fichier prog.
pour l'instruction execl il faut la mettre en fin car une fois le processu fils charge le programme "prog" en argument il ne peut pas récupérer le code précedent par exemple si on ajoute juste aprés l'instruction execl une autre instruction ,cette derniere ne s'executera pas car son code sera ecraser par le nouveau code de programme passer en argument dans la fonction execl.

Source / Exemple :


/*------code source de processus.c:-------*/

#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
int fils,pidfils,iden;
char etat1[1024];
char etat2[1024];
main()
{
int pid_p;
pid_p=getpid();
printf("pere: je suis le processus pere mon pid=%d\n",getpid());
sleep(300);
sprintf(etat1,"ps -o s -p%d",pid_p);
system(etat1);
iden=fork();
if(iden==-1) 
{
printf("erreur de creation de processus fils\n"); 
exit(1); 
}
if(iden==0)
{
int pid_f;
pid_f=getpid();
printf("\nfils: je suis le processus fils mon pid=%d\n\n",pid_f);
sprintf(etat2,"ps -o s -p%d",pid_f);
system(etat2);
sleep(90);
execl("prog","prog",0);
}
else 
{
printf("\npere: maintenant je dors 5 secondes\n");
sleep(5);
printf("pere: je suis reveille\n\n");
pidfils=wait(&fils);
  printf("pere:  mon processus fils termine son execution et son pidfils=%d\n\n",pidfils);
}
}

/*-----------code source de prog.c-----------*/
#include<sys/types.h>
#include<sys/wait.h>

main()
{
printf("\n\t*************PROGRAMME EXECUTE PAR LE FILS******************\n");
printf("\nle programme:   je suis le programme executer par le fils\n");
printf("\nle programme:   l'identificateur de mon pere ppid=%d\n",getppid());
printf("\nle programme:   le fils va vous donnez la date d'haujourd'huit\n");
printf("\nle programme:\t");
execlp("/usr/bin/date","/usr/bin/date",NULL); 
}

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.