Communication entre fork()
Résolu
Piven
Messages postés
90
Statut
Membre
-
grou29 Messages postés 39 Statut Membre -
grou29 Messages postés 39 Statut Membre -
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()
- Near-field communication - Guide
- 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
- Le protocole assure que la communication entre l'ordinateur de chaïma et le serveur de partageimage est car les informations seront avant d'être envoyées. - Forum Windows
- Erreur de protocole réseau ✓ - Forum Mozilla Firefox