|
|
Auteur
|
Message
|
1
2
|
Vive la bière allemande
|
|
|
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."
|
|
/// lamborghini murcielago \\\
|
|
|
t'a demander sur hfr?
|
|
Vive la bière allemande
|
|
|
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."
|
|
Popopopo
|
|
|
|
Essaye les newsgroups, et irc
|
|
Vendeur de larmes
|
|
|
j'arrive plus a retrouver mon cours de l'an dernier
|
|
Vive la bière allemande
|
|
|
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."
|
|
Vendeur de larmes
|
|
|
je sais plus, je suis pas alle a tous les cours ( :ange: ), et je ne retrouve plus le peu que j'ai
|
|
Vive la bière allemande
|
|
Vendeur de larmes
|
|
|
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
|
|
Vive la bière allemande
|
|
|
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."
|
|
Vendeur de larmes
|
|
|
|
oui, en creant un processus fils, ca devrait marcher
|
|
Vive la bière allemande
|
|
|
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."
|
|
Vendeur de larmes
|
|
|
|
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
|
|
Vive la bière allemande
|
|
|
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."
|
|
Vive la bière allemande
|
|
|
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."
|
|
Vendeur de larmes
|
|
|
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
|
|
Vive la bière allemande
|
|
|
|
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."
|
|
Vive la bière allemande
|
|
|
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
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
Vendeur de larmes
|
|
|
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 )
|
|
Vive la bière allemande
|
|
|
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."
|
|
Vive la bière allemande
|
|
|
|
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."
|
|
Vendeur de larmes
|
|
|
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
|
|
Vive la bière allemande
|
|
|
je sais pas non plus, j'ai pas encore compris a quoi ca servait exactement
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
Vive la bière allemande
|
|
|
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."
|
|
Vive la bière allemande
|
|
|
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."
|
|
Vendeur de larmes
|
|
|
ouais :/
c'est quoi exactement que tu veux faire ?
|
|
Vive la bière allemande
|
|
|
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."
|
|
Vive la bière allemande
|
|
|
e-deby, si tu m'entends
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
Vendeur de larmes
|
|
|
|
oui, euh, je reflechissais savoir si tu avais vraiment besoin de creer plusieurs process pour faire ca
|
|
Vive la bière allemande
|
|
|
ta conclusion ?
-------
Coluche : "Le capitalisme, c'est l'exploitation de l'homme par l'homme. Le syndicalisme, c'est le contraire."
|
|
Vendeur de larmes
|
|
|
qu'il faudrait attendre le second semestre pour que je commence les cours de C
plus serieusement, je sais pas, je risque de dire des conneries la
|
|
Vive la bière allemande
|
|
|
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."
|
|
|
|
|
|
e-deby et library : vous faites quoi comme études (quel niveau)?
|
|
Vive la bière allemande
|
|
|
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."
|
|
Popopopo
|
|
|
|
|
|
(MP ca ne me dit rien en fin de compte, t'as quel âge alors (jsuis du québec ; ) ))
|
|
Popopopo
|
|
|
C'est la deuxième année de maths sup, tu vois ?
C'est les classes préparatoires aux grandes écoles
|
|
Vive la bière allemande
|
|
|
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."
|
|
Vendeur de larmes
|
|
|
kronenbourg a écrit :
e-deby et library : vous faites quoi comme études (quel niveau)?
1ere annee d'IUT d'info
|
|
Omega
|
|
|
Library a écrit :
ghz > je suis MP mais en classe de MP* :D
kro > 19 ans
MP c'est maths-physique
respect
|
|
1
2
|