01net    Web


Actuellement en ligne : 136 Utilisateurs dont 7 dans Programmation et développement >S'inscrire      >S'identifier      >Recherche      >Aide  
modéré par A.Ouloube, Beno@  
01net > Forum de 01net > Programmation et développement > C/C++
> [C] fork et les processus
Passionné(e) d'internet, de logiciels, de forums ? 01net recrute...
Auteur
Message
 
<     1   2       >
Library
  Vive la bière allemande
  :-)
      ?   @     Posté le 30/12/2002 01:13:15  
Voter pour ce message
quelqu'un aurait une bonne doc sur la fonction fork() et les processus en C ?

merci :)

(sur google j'ai trouvé plusieurs sites mais pas assez complets)
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
forummp3
  /// lamborghini murcielago \\\
  :-)
      ?   ^   @     Posté le 30/12/2002 11:25:49  
Voter pour ce message
t'a demander sur hfr? ;)
Library
  Vive la bière allemande
  :-)
      ?   @     Posté le 30/12/2002 12:36:06  
Voter pour ce message
oui ;)

mais ici aussi y a des gens qui connaissent tres bien le C :)
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
ghz
  Popopopo
  :-)
      ?   ^   @     Posté le 30/12/2002 12:40:16  
Voter pour ce message
Essaye les newsgroups, et irc
e-deby
  Vendeur de larmes
  Groupe :  Equipe 01net
  :-)
      ?   ^   @     Posté le 30/12/2002 12:43:53  
Voter pour ce message
j'arrive plus a retrouver mon cours de l'an dernier :(
Library
  Vive la bière allemande
  :-)
      ?   @     Posté le 30/12/2002 12:45:50  
Voter pour ce message
t'as fait ca l'an dernier ?

tu dois bien t'en rappeler :ange:
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
e-deby
  Vendeur de larmes
  Groupe :  Equipe 01net
  :-)
      ?   ^   @     Posté le 30/12/2002 12:52:31  
Voter pour ce message
je sais plus, je suis pas alle a tous les cours ( :ange: ), et je ne retrouve plus le peu que j'ai :(
Library
  Vive la bière allemande
  :-)
      ?   @     Posté le 30/12/2002 12:58:18  
Voter pour ce message
[:limit:1] [:limit:1] [:limit:1]



tu saurais au moins m'expliquer ce que ca fait précisément, pour que je vois si c'est ca que je veux ou pas
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
e-deby
  Vendeur de larmes
  Groupe :  Equipe 01net
  :-)
      ?   ^   @     Posté le 30/12/2002 13:06:15  
Voter pour ce message
alors, en gros, ca va :

- analyser la table des process pour savoir si il y a les ressources pour en creer un nouveau

- si c'est possible, ca te cree un nouveau processus fils du processus qui execute fork()

- Copier l'image du processs pere dans le nouveau process fils

- indiquer la mappe memoire du fils dans la table des process

- attribuer un PID au fils

- informer le noyau de la creation du processus fils, et lui donner sa mappe memoire





Voila, il doit manquer quelques details, mais c'est tout ce dont j'ai pu me souvenir
Library
  Vive la bière allemande
  :-)
      ?   @     Posté le 30/12/2002 13:11:33  
Voter pour ce message
attends, je vais plutot t'expliquer ce que je veux faire et tu vas me dire si tu sais comment faire :D



ce que je veux, c'est "dédoubler" mon programme, c'est à dire que je veux que deux parties s'éxécutent simultanément. J'aimerais aussi qu'une des deux parties puisse tuer l'autre partie (ca ne va que dans un sens, l'autre n'aura pas a tuer la premiere). C'est pour ca que j'ai pensé à fork qui crée un processus fils.

A ton avis ca se fait avec quelle(s) fonction(s) ?
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
e-deby
  Vendeur de larmes
  Groupe :  Equipe 01net
  :-)
      ?   ^   @     Posté le 30/12/2002 13:12:52  
Voter pour ce message
oui, en creant un processus fils, ca devrait marcher
Library
  Vive la bière allemande
  :-)
      ?   @     Posté le 30/12/2002 13:15:28  
Voter pour ce message
si je crée un processus fils le pere peut continuer a etre executé en meme temps que le fils ?



va falloir que je trouve une doc bien sur internet maintenant.

je suis sous win la (pas de connexion internet sous linux actuellement). Tu peux me dire si le man fork est bien ?
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
e-deby
  Vendeur de larmes
  Groupe :  Equipe 01net
  :-)
      ?   ^   @     Posté le 30/12/2002 13:26:35  
Voter pour ce message


FORK(2) Linux Programmer's Manual FORK(2)



NAME

fork - create a child process



SYNOPSIS

#include <sys/types.h>

#include <unistd.h>



pid_t fork(void);



DESCRIPTION

fork creates a child process that differs from the parent process only in its PID and PPID, and in the fact that

resource utilizations are set to 0. File locks and pending signals are not inherited.



Under Linux, fork is implemented using copy-on-write pages, so the only penalty incurred by fork is the time and memory

required to duplicate the parent's page tables, and to create a unique task structure for the child.



RETURN VALUE

On success, the PID of the child process is returned in the parent's thread of execution, and a 0 is returned in the

child's thread of execution. On failure, a -1 will be returned in the parent's context, no child process will be cre-

ated, and errno will be set appropriately.



ERRORS

EAGAIN fork cannot allocate sufficient memory to copy the parent's page tables and allocate a task structure for the

child.



ENOMEM fork failed to allocate the necessary kernel structures because memory is tight.



CONFORMING TO

The fork call conforms to SVr4, SVID, POSIX, X/OPEN, BSD 4.3.



SEE ALSO

clone(2), execve(2), vfork(2), wait(2)



Linux 1.2.9 1995-06-10 FORK(2)

lines 1-40/40 (END)




Par contre, sous Win, je ne peux pas te garantir que fork() se comporte de maniere analogue
Library
  Vive la bière allemande
  :-)
      ?   @     Posté le 30/12/2002 13:33:41  
Voter pour ce message
je programme sous linux, c bcp plus pratique

sinon comme man ils ont deja fait plus détaillé :D

faut que je trouve des exemples concrets
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
Library
  Vive la bière allemande
  :-)
      ?   @     Posté le 30/12/2002 13:58:07  
Voter pour ce message
ah oui, c'est strange qd meme ! http://kafka.fr.free.fr/docs/prog_syst_linux-html/html/slide_35.html



mais c'est vraiment ca qu'il me faut :)

une petite question :

si j'ai une variable globale que le processus pere modifie, le processus fils voit la valeur modifiée aussi ?



sinon e-deby, tu sais comment on se sert du clavier en C ?

genre je veux que mon processus pere détecte si l'utilisateur appuie sur Echap, et dans ce cas le processus fils doit s'arreter.
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
e-deby
  Vendeur de larmes
  Groupe :  Equipe 01net
  :-)
      ?   ^   @     Posté le 30/12/2002 14:43:48  
Voter pour ce message
non, la variable globale est locale a un processus, pour les faire communiquer, il faut utiliser les communications inter-processus (SEND et RECEIVE), mais la je ne pourrais pas t'aider



pour la gestion du clavier, je ne me rappelle plus, mais si c'est comme en ADA, ca se gere comme un fichier en lecture
Library
  Vive la bière allemande
  :-)
      ?   @     Posté le 30/12/2002 15:59:33  
Voter pour ce message
merci, je vais essayer de trouver des infos la dessus (les fonctions send et receive et la gestion du clavier)
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
Library
  Vive la bière allemande
  :-)
      ?   @     Posté le 30/12/2002 16:30:40  
Voter pour ce message
apparament pour le clavier faut utiliser kbhit() qui est dans conio.h pour détecter qu'une touche est enfoncée et getch() pour avoir la touche (par contre ca a l'air de marcher que pour les touches avec des lettres ou des chiffres, et pas pour Echap, F1...)



mais une autre question sur les variables globales et les processus pere et fils : est ce que ces processus acceptent quand meme des variables globales, venant de l'exterieur ?

Ce qui est bizzare c'est que si je modifie une variable globale dans un des processus, si la variable est globale, l'autre processus aura aussi une valeur pour cette variable. Il aura la valeur qu'elle avait avant le fork et il peut la modifier lui aussi, ce qui aura pour effet d'obtenir une meme variable avec deux valeurs différentes ?

Chuis un peu noyé la :D
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
e-deby
  Vendeur de larmes
  Groupe :  Equipe 01net
  :-)
      ?   ^   @     Posté le 30/12/2002 16:36:38  
Voter pour ce message
ben au moment du fork(), tu crees un process totalement identique, qui devient independant.



Donc, si tu modifie une variable du processus fils, locale ou globale, peu importe, cela n'interviendra pas dans le process pere (j'espere que je dis pas de conneries :D )
Library
  Vive la bière allemande
  :-)
      ?   @     Posté le 30/12/2002 16:41:46  
Voter pour ce message
ah d'accord, je comprend :). Je comprenais pas qu'ils étaient indépendants.

mais est ce que les process ont les variables globales ?
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
Library
  Vive la bière allemande
  :-)
      ?   @     Posté le 30/12/2002 16:43:30  
Voter pour ce message
sinon je trouve pas grand chose sur send et receive, mais j'ai l'impression que ce sont les pipes qui permettent la communication entre deux process. C'est ca ?
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
e-deby
  Vendeur de larmes
  Groupe :  Equipe 01net
  :-)
      ?   ^   @     Posté le 30/12/2002 16:48:35  
Voter pour ce message
les pipe permettent d'injecter le flux sortant d'un processus dans le flux entrant d'un autre, par exemple



ls /dev | more



mais generalement, les pipe sont materialises au niveau de l'appel des processus par l'utilisateur, je ne sais pas si tu peux l'utiliser dans ton cas
Library
  Vive la bière allemande
  :-)
      ?   @     Posté le 30/12/2002 17:11:41  
Voter pour ce message
je sais pas non plus, j'ai pas encore compris a quoi ca servait exactement :D
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
Library
  Vive la bière allemande
  :-)
      ?   @     Posté le 30/12/2002 17:19:41  
Voter pour ce message
ca fait quoi la fonction write ?



http://216.239.51.100/search?q=cache:2HbTTjYsGa0C:www.epita.fr:8000/~goniea_f(...)
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
Library
  Vive la bière allemande
  :-)
      ?   @     Posté le 30/12/2002 17:28:44  
Voter pour ce message
apparament le pipe est ce qu'il me faut : http://monge.univ-mlv.fr/~roussel/DESS/tubes.html

ca permet au processus pere d'"écrire" au processus fils et donc de lui donner des ordres.

enfin tout ca est bien compliqué !
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
e-deby
  Vendeur de larmes
  Groupe :  Equipe 01net
  :-)
      ?   ^   @     Posté le 30/12/2002 18:47:11  
Voter pour ce message
ouais :/



c'est quoi exactement que tu veux faire ?
Library
  Vive la bière allemande
  :-)
      ?   @     Posté le 30/12/2002 19:48:08  
Voter pour ce message
pour l'instant j'ai un programme, auquel je donne quelques entrées dont un certain nombre de boucles à effectuer. Normalement, au fur et a mesure des calculs, une certaine fonction doit diminuer. Cependant, il arrive suite à de mauvais réglage ou par manque de bol (de temps en temps c'est plus du manque de bol, mais de l'acharnement) que la fonction oscille (en gros elle stagne alors que tu veux la faire diminuer.

Quand la fonction stagne, le mieux à faire c'est de relancer le programme, mais c'est un peu long a cause de certains noms à donner en entrée. Lorsque la fonction a stagné, il faut aussi parfois modifier certains paramètres.



Ce que je veux faire :

je crée dès le début un processus fils. Celui-ci a pour mission de faire tous les calculs, ce qui peux parfois prendre quelques minutes. Au début, le processus pere demande quelques informations à l'utilisateur (nom d'un fichier, nombre de boucles à effectuer). Ensuite, il passe ces valeurs au processus fils qui commence à calculer.

Le probleme de mon programme, c'est que pour l'arreter je dois faire Ctrl+C, et a ce moment ca crée quelques merdes dans les fichiers dans lesquels je rentre les résultats des calculs.

Ce que je veux donc, c'est que le process pere, pendant que le fils calcule, soit à l'affut de ce que fait l'utilisateur. Si l'utilisateur appuie sur une certaine touche (j'avais pensé à esc au début, mais apparament c'est plus compliqué a faire, alors mettons que la touche soit x), le processus pere donne l'ordre au processus fils d'arreter de calculer, et le pere demande alors à l'utilisateur ce qu'il souhaite faire (relancer le programme, modifier un parametre, générer un nouveau fichier de données (elles sont utilisées par le fils pour le calcul)...) et selon ce que dit l'utilisateur, il fait les modifications demandées ou donne l'ordre à son fils de recommencer le calcul.



voila en gros ce que je veux faire. Ca parait peut etre un peu compliqué mais apres le programme sera tres simple d'emploi.
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
Library
  Vive la bière allemande
  :-)
      ?   @     Posté le 30/12/2002 22:33:31  
Voter pour ce message
e-deby, si tu m'entends [:huhu:1]
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
e-deby
  Vendeur de larmes
  Groupe :  Equipe 01net
  :-)
      ?   ^   @     Posté le 30/12/2002 23:29:14  
Voter pour ce message
oui, euh, je reflechissais savoir si tu avais vraiment besoin de creer plusieurs process pour faire ca
Library
  Vive la bière allemande
  :-)
      ?   @     Posté le 30/12/2002 23:35:02  
Voter pour ce message
ta conclusion ? ;)
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
e-deby
  Vendeur de larmes
  Groupe :  Equipe 01net
  :-)
      ?   ^   @     Posté le 30/12/2002 23:36:25  
Voter pour ce message
qu'il faudrait attendre le second semestre pour que je commence les cours de C [:floleb77:1] [:floleb77:1] [:floleb77:1]



plus serieusement, je sais pas, je risque de dire des conneries la
Library
  Vive la bière allemande
  :-)
      ?   @     Posté le 30/12/2002 23:38:16  
Voter pour ce message
je vais surement essayer comme ca. Si ca marche ca fera vraiment quelque chose de super à utiliser :)
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
kronenbourg
  
   
      ?   @     Posté le 31/12/2002 05:12:49  
Voter pour ce message
e-deby et library : vous faites quoi comme études (quel niveau)?
Library
  Vive la bière allemande
  :-)
      ?   @     Posté le 31/12/2002 09:38:42  
Voter pour ce message
je suis en MP* (prépa scientifique)

on fait pas de programmation en prépa, c'est moi qui veut apprendre le C pour un projet.
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
ghz
  Popopopo
  :-)
      ?   ^   @     Posté le 31/12/2002 10:18:46  
Voter pour ce message
MP ou MP* ?
kronenbourg
  
   
      ?   @     Posté le 31/12/2002 10:36:23  
Voter pour ce message
(MP ca ne me dit rien en fin de compte, t'as quel âge alors (jsuis du québec ; ) ))
ghz
  Popopopo
  :-)
      ?   ^   @     Posté le 31/12/2002 10:38:31  
Voter pour ce message
C'est la deuxième année de maths sup, tu vois ?

C'est les classes préparatoires aux grandes écoles
Library
  Vive la bière allemande
  :-)
      ?   @     Posté le 31/12/2002 10:39:12  
Voter pour ce message
ghz > je suis MP mais en classe de MP* :D



kro > 19 ans

MP c'est maths-physique
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
e-deby
  Vendeur de larmes
  Groupe :  Equipe 01net
  :-)
      ?   ^   @     Posté le 31/12/2002 11:27:21  
Voter pour ce message
kronenbourg a écrit :
e-deby et library : vous faites quoi comme études (quel niveau)?





1ere annee d'IUT d'info
-stan-
  Omega
   
      ?   @     Posté le 31/12/2002 13:27:26  
Voter pour ce message
Library a écrit :
ghz > je suis MP mais en classe de MP* :D



kro > 19 ans

MP c'est maths-physique







respect :jap:
<     1   2       >

01net > Forum de 01net > Programmation et développement > C/C++
> [C] fork et les processus

Aller à :

Page générée en : 0.118s - X2board 2.2

Nous contacter | Charte de confiance | Voir notice légale

Tous droits réservés © 1999 - 2008 Groupe Tests - 01net.
<