Communication entre fork()
Résolu
Piven
Messages postés
81
Date d'inscription
Statut
Membre
Dernière intervention
-
grou29 Messages postés 39 Date d'inscription Statut Membre Dernière intervention -
grou29 Messages postés 39 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voila mon problème, J'ai N processus qui s'exécutent en même; le programme s'arrête lorsque l'utilisateur presse ctrl+c . Mais je ne sais pas comment faire pour qu'il se termine également lorsque touts les processus ont finit de s'exécuter. Ce programme est pour m'entrainer avec les sémaphores et tester le librairie sem.h que je vient de terminer.Il simule l'activité d'un magasin comportant 1 entrée, 3 bouchers et 2 caisses. Voici mon code:
--------------------------------------------------magasin.c------------------------------------------------------------
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/sem.h>
#include <time.h>
#include "sem.h"
#include <signal.h>
int N=10;
char *sem_boucher = "/tmp/boucher.sem";
char *sem_caisse = "/tmp/caisse.sem";
char *sem_entree = "/tmp/entree.sem";
int n,i;
int pid [10];
void tue(int)
{
//tuer touts les procossus;
for (i=1;i<=N;i++){
kill( pid[i], SIGKILL );
printf("\n");
exit(0);
}
}
main(){
//création des semaphores;
sem_create(sem_boucher,3);
sem_create(sem_caisse, 2);
sem_create(sem_entree, 1);
//obtention des semaphores;
semaphore boucher=sem_id(sem_boucher);
semaphore entree=sem_id(sem_entree);
semaphore caisse=sem_id(sem_caisse);
//création des processus
for (i=1;i<=N;i++){
if ((pid[i]=fork())==0){
P(entree);
sleep(rand()%4);
printf("le client %d entre par le tourniquet.\n",i);
V(entree);
P(boucher);
sleep(rand()%4);
printf("le client %d va chez le boucher.\n",i);
V(boucher);
sleep(rand()%4);
printf("le client %d prend des produits en acces libre\n",i);
P(caisse);
sleep(rand()%4);
printf("le client %d passe a la caisse puis sort.\n",i);
V(caisse);
exit(0);//on sort
}
}
while(1) signal(SIGINT,tue); //On attend un ctrl+c
}
Voila mon problème, J'ai N processus qui s'exécutent en même; le programme s'arrête lorsque l'utilisateur presse ctrl+c . Mais je ne sais pas comment faire pour qu'il se termine également lorsque touts les processus ont finit de s'exécuter. Ce programme est pour m'entrainer avec les sémaphores et tester le librairie sem.h que je vient de terminer.Il simule l'activité d'un magasin comportant 1 entrée, 3 bouchers et 2 caisses. Voici mon code:
--------------------------------------------------magasin.c------------------------------------------------------------
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/sem.h>
#include <time.h>
#include "sem.h"
#include <signal.h>
int N=10;
char *sem_boucher = "/tmp/boucher.sem";
char *sem_caisse = "/tmp/caisse.sem";
char *sem_entree = "/tmp/entree.sem";
int n,i;
int pid [10];
void tue(int)
{
//tuer touts les procossus;
for (i=1;i<=N;i++){
kill( pid[i], SIGKILL );
printf("\n");
exit(0);
}
}
main(){
//création des semaphores;
sem_create(sem_boucher,3);
sem_create(sem_caisse, 2);
sem_create(sem_entree, 1);
//obtention des semaphores;
semaphore boucher=sem_id(sem_boucher);
semaphore entree=sem_id(sem_entree);
semaphore caisse=sem_id(sem_caisse);
//création des processus
for (i=1;i<=N;i++){
if ((pid[i]=fork())==0){
P(entree);
sleep(rand()%4);
printf("le client %d entre par le tourniquet.\n",i);
V(entree);
P(boucher);
sleep(rand()%4);
printf("le client %d va chez le boucher.\n",i);
V(boucher);
sleep(rand()%4);
printf("le client %d prend des produits en acces libre\n",i);
P(caisse);
sleep(rand()%4);
printf("le client %d passe a la caisse puis sort.\n",i);
V(caisse);
exit(0);//on sort
}
}
while(1) signal(SIGINT,tue); //On attend un ctrl+c
}
A voir également:
- Communication entre fork()
- Le protocole assure que la communication entre l'ordinateur - Forum Réseau
- Near-field communication - Guide
- Adele - Forum Facebook
- Une erreur de communication est détectée dans le module de sécurité - Forum TNT / Satellite / Réception
- La communication via ssl a echoue ps vita ✓ - Forum Google Chrome