begin process at 2012 05 30 05:50:23
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Systeme

 > 

Processus (HWP) multiple C sous UNIX?


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

Processus (HWP) multiple C sous UNIX?

mercredi 6 octobre 2004 à 21:11:04 | Processus (HWP) multiple C sous UNIX?

cbismuth

Bonjour à tous!

Une question me rend fou depuis plusieurs jours...

Je souhaite créer N processus (HWP, pas des threads) en C sous UNIX avec une boucle "for" et l'appel "fork()". Mon idée était la suivante (peu importe le code des fonctions fils() et pere() appelée):


1 #define N 10
2
3 int main() {
4 register int i;
5 for(i = 0; i < N; i++) {
6 switch(fork()) {
7 case -1: return(1);
8 case 0: fils(); break;
9 default: pere(); wait(0); break;
10 }
11 }
12 return(0);
13 }


Après mûre (et longue...) reflexion, je me suis dis:
"...du fait que l'appel fork() duplique le processus et donc la section de code qui précede son appel, la boucle "for" est également dupliquée! Chaque fils exécutera donc une boucle "for" et donc un fork(), non?"

Si quelqu'un voit comment créer N processus HWP, merci de me faire signe...

Christophe
mercredi 6 octobre 2004 à 21:16:36 | Processus (HWP) multiple C sous UNIX?

cbismuth

Précision:
Ce code produit une infinité de processus fils, et non pas 10 comme souhaité...
mercredi 6 octobre 2004 à 22:56:29 | Re : Processus (HWP) multiple C sous UNIX?

cosmobob

salut,
il faut que tu choisisses un des deux cas ou tu sortes de ta boucle; par exemple dans le cas ou le fork retourne 0, execute ta procédure fils(); mais apres sors de ton for(;;)... celui ci sera continué par le processus pere. dans ce cas, seul le processus pere original va executer la boucle, car chaque processus fils crée n'essaiera plus de la continuer, resultat seuls N processus seront crées. avec ton code, tu as crée 2^N processus comme tu sembles l'avoir compris et remarqué...

a++ ;)
jeudi 7 octobre 2004 à 20:05:09 | Re : Processus (HWP) multiple C sous UNIX?

cbismuth

Tu as raison! Mais comment sortir cette boucle proprement sans utiliser l'instruction "goto", puisqu'il existe deux niveaux d'imbrication?
Peut-être qu'avec un test de pid je peux arriver, du genre:


1 #define N 10
2
3 int main() {
4 register int i, pid;
5 for(i = 0; i < N; i++) {
6 switch(pid = fork()) {
7 case -1: return(1);
8 case 0: fils(); break;
9 default: pere(); wait(0); break;
10 }
11 if (pid == 0) break;
12 }
13 return(0);
14 }


A vue d'oeil, je pense que cela marche: merci bôcoup!


3029 ...
3030fprintf(stderr, "c'est au pied du mur qu'on voit le mieux le mur...");
3031...


@+
Christophe
jeudi 7 octobre 2004 à 20:57:18 | Re : Processus (HWP) multiple C sous UNIX?

cbismuth

IMPECABLE MERCI!


#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>

#define N 10

int main() {
register int i, pid;
for(i = 0; i < N; i++) {
switch(pid = fork()) {
case -1: return(1);
case 0: printf("fils n°%d\n", i); break;
default: wait(0); break;
}
if (pid == 0) break;
}
return(0);
}


Cette discussion est classée dans : code, for, processus, fork, hwp


Répondre à ce message

Sujets en rapport avec ce message

Code QBasic à convertir Cpp [ par SneakGuy ] Salut, j'ai besoin d'aide pour convertir ce code QBasic en Cpp...*Désoler, tous les signes"plus" sont remplacés par la lettre p. Merci.CLSFOR x = 1 Passer un code Unix sous Windows (problème avec fork) [ par nepomuk ] Je cherche à passer ce code sous windows :pid_t pid;pid=fork(); switch (pid){ case '0' : Envoi_carte(Text); break; case default stopper une boucle for et la recommencer [ par danis56 ] Bonjour , J'ai un probleme avec une partie de mon programme . Je doit bloquer une boucle for a l'interieur de son code et je n'y arrive pas , j'ai ess probleme avec CreateFile [ par Roudy ] Je veux créer un fichier qui contiendra le path de tout les processus a killer mais le probleme c que mon fichier ne veux pas rajouter les ligne dans Gestion et partage de mémoire [ par RaSa ] Bonjour à tous,Je pensais avoir une idée assez claire de la manière dont windows gère la mémoire. En me penchant sur l'interface IDataObject de COM (e typdef enum [ par oudkaramla ] salut tout le monde,j'ai un problem dans la définition d'une valeure d'un type enumeré et de lui affecter une valeure:le ty enumeré est le suivanttype typedef enum [ par oudkaramla ] salut tout le monde,j'ai un problem dans la définition d'une valeure d'un type enumeré et de lui affecter une valeure:le ty enumeré est le suivantty Visual C++ 8.0 ?? [ par MasterShadows ] Salut à tous, alors voilà je voulais savoir si visual c++ 7 pouvait être télécharger, j'ai donc fait une recherche sur internet et j'aivu que la versi 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" fork() et ressource partagée [ par iam_myst ] Bonjour, Je voudrais créer un programme ou je souhaite partager une ressource entre un processus père et un processus fils. j'ai ma ressource déclarée


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

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,920 sec (4)

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