begin process at 2012 05 30 05:51:07
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

System

 > 

Processus en C


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Processus en C

lundi 5 décembre 2011 à 19:24:52 | Processus en C

nanez

Bonjour !!
je commence avec les processus en c; voici un petit programme que j'ai fais

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
int main(){

pid_t fils, petitfils, moi, pere;

fils=fork();
switch ( fils ) {
case -1 : printf("Erreur : echec du fork\n");
break;
case 0 : //processus fils

petitfils=fork();
switch ( petitfils ) {
case -1 : printf("Erreur : echec du fork\n");
break;
case 0 : //processus petit fils

moi = getpid();
pere=getppid();
printf("Bonjour je suis le petit fils, mon N° = %d mon pere = %d\n",moi,pere);
sleep (60);
exit(0);
}

//Processus fils pere du petit fils

moi = getpid();
pere = getppid();
printf("Bonjour je suis le fils, mon N° = %d mon pere = %d\n",moi,pere);

exit(0);
}

//Processus pere

moi = getpid();
pere = getppid();
printf("Bonjour je suis le pere, mon N° = %d mon pere = %d\n",moi,pere);
return 0;
}

il faut que le petit fils s'endort 60 secondes. Le fils tue alors le petit-fils et ses sorties. Le père attend que le fils termine et imprime "fils terminé"!! j'ai beau essayé je n'ai pas compris comment marche le kill() et waitpid()!!
quelqu'un pourrait il m'aider svp ??
mercredi 7 décembre 2011 à 00:45:34 | Re : Processus en C

TychoBrahe

Réponse acceptée !
Salut,

Pour commencer, kill sert à envoyer un signal à un processus, si tu veux tuer un processus c'est en effet un bon plan. Ensuite, wait(), waitpid() etc servent, lorsqu'un processus père a un ou plusieurs enfants, d'attendre que le statut d'un de ces enfants change. Je te propose une variante de ton code afin d'illustrer tout ça :
Code C/C++ :
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <stdio.h>

int main()
{
  pid_t fils, petitfils, moi, pere;
  int st;

  fils = fork();
  if (fils == -1)
    printf("Erreur : echec du fork\n");
  else if (fils == 0)
    {
      sleep(1);
      petitfils = fork();
      if (petitfils == -1)
	printf("Erreur : echec du fork\n");
      else if (petitfils == 0)
	{
          // le petit fils
	  sleep(1);
	  moi = getpid();
	  pere = getppid();
	  printf("Bonjour je suis le petit fils, mon N° = %d mon pere = %d\n",moi,pere);
	  sleep(30);
	  printf("Petit fils fini\n");
	  exit(0);
	}

      //Processus fils pere du petit fils
      moi = getpid();
      pere = getppid();
      printf("Bonjour je suis le fils, mon N° = %d mon pere = %d\n", moi, pere);

      sleep(3);
      printf("Fils pas content, tue petit fils\n");
      kill(petitfils, SIGQUIT);
      wait(&st);
      printf("Fils fini\n");
      exit(0);
    }

  //Processus pere

  moi = getpid();
  pere = getppid();
  printf("Bonjour je suis le pere, mon N° = %d mon pere = %d mon fils = %d\n", moi, pere, fils);
  wait(&st);
  printf("Papa fini\n");
  return 0;
}

Et le résultat :
Code :
-> ./a.out 
Bonjour je suis le pere, mon N° = 8877 mon pere = 6184 mon fils = 8878
Bonjour je suis le fils, mon N° = 8878 mon pere = 8877
Bonjour je suis le petit fils, mon N° = 8879 mon pere = 8878
Fils pas content, tue petit fils
Fils fini
Papa fini

Que s'est-il passé ?
Le papa fork. Il créé donc un fils. Ces deux processus s'exécutent en parallèle. Pendant que le père, grâce à wait(), attend que le fils se termine, le fils, lui, va patienter 1 seconde puis forker à son tour, et donc lancer le petit fils. Ce petit fils attend 1 seconde avant de se présenter puis passe en pause pendant 30 seconde pendant que le fils attend 3 secondes, puis tue le petit fils (qui finalement n'aura pas attendu ses 30 secondes et n'aura aps affiché son message de fin). Bien entendu le fils utilise wait afin de reprendre le status du petit fils, des fois que ça serve, puis se termine. Le fils étant fini, le père sort de son wait() et se termine à son tour.
jeudi 8 décembre 2011 à 19:35:45 | Re : Processus en C

nanez

merciii pour ton aide TychoBrahe; j'ai compris ce que qui n'allais pas


Cette discussion est classée dans : printf, include, fils, pere, processus


Répondre à ce message

Sujets en rapport avec ce message

récuperation de l'etat d'un processus [ par Spy63 ] J'ai un programme en C systeme que j'ecrit sous vi pour linux dans lequel:-j'ai un pere et deux fils.-Mon but et d'atendre que les fils soit en pause La hierarchie pere et fils [:(] !!!!!!!!!!!! HELP!!!!!!!!!!! [ par laetitia334 ] bonjour a tous! j'ai un probleme avec un programme! car je ne comprend pas les termes utilisés:Main (){int pid;printf("je suis le processus initial \n Variable global et processus [ par obasileus ] Salut j'ai un programme comportant 4 processus fils qui lancent chacun 4 threads qui gèrent 2 problemes producteur/consom. Le processus pere à besoin wait et exit dans fork [ par mina_mi ] bonjour j'ai un probleme sur les notions de wait() et exit() dans la création des processus     par exemples si j'ai plusieurs processus fils qui ont effacer l'ecran pour afficher d'autre texte... [ par S_M_E ] voici mon programme, j'essaye d'effacer l'écran en utilisant cls ou system("cls") mais que DALE, apparement je n'utilise pas la bonne librairie laquel Equation seconde degres [ par sliverman ] Bonsoir a tous, alors voila, ( je commence en éléctro des demain le C et le prof nous a dit se qu'on devra savoir faire au bout des 8h, c'est résoudre Recupérér Handle de d'un processus [ par kiki67100 ] Bonjour je voudrais recuperer le handle d'un processus active ex :explorer.exejai deja un code similaire mais il trouve que le PID a partir du process Aide Processus fils [ par phoenix_91 ] Bonjour, J'ai un programme (C++) pere qui créé un processus fils qui lance une application. J'aimerais recuperer l'affichage produit par le processu Chaine de caractère [ par Thanatoster ] Bonjour a tous, mon problème est le suivant, pour les cours je dois faire un programme d'apres l'énoncé suivant"saisir au clavier des éléments chaine processus sous unix [ par atefensi ] Je veux vous poser quelque question sur les processus sous unixJ'ai le programme suivantMain(){ int i=0 ;If(fork()==0){i=1 ;Exit(i) ;i=2 ;}Printf("%d"


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales