Int fork();

Fermé
etaquimby - 6 déc. 2007 à 10:41
 etaquimby - 8 déc. 2007 à 10:27
Bonjour,
je me demande pourquoi un utilisateur ou un developpeur utilise la fonction 'fork()' pour creer un processus fils et pourtant ce processus creé a les memes caracteristiques que son processus pere?

5 réponses

kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
6 déc. 2007 à 11:14
Bonjour,

Créer un nouveau processus permet de faire une tache indépendament de celle du père, et ainsi distribuer le travail a faire sur plusieurs processus. Comme tu le dis si bien, le processus fils hérite de l'environnement du père, donc il connaitra toutes les variables d'environnement du père (si mes souvenirs sont bons), par contre l'inverse n'est pas vrai : si tu créé des variables au niveau du fils, le père ne les connaitra pas. C'est un peu le même principe que l'héritage des classes en java si tu connais le java ?

Voilà, j'espère avoir répondu à tes questions.
0
merci beaucoup
j'ai compris l'utilité de cette fonction.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
6 déc. 2007 à 12:44
Petite précision, fork crée deux processus independant (si j'ai bien compris), c'est a dire, qu'une fois le fork() lancer, il n'y a plus de "discution" possible entre père et fils, du moins du point de vue des variables. il faut alors passer par fichier ou socket etc.
L'interet peut être la parallélisation de processus.
En revanche, je trouve que a n'a strictement rien à voir avec l'héritage en langage objet !
-1
merci
mais ce que je savais que le processus pere attend le resultat qui sera renvoyé par le processus fils. donc on peut dire qu'ils sont dependants.
ce que je n'arrive pas a comprendre est l'utilité de l'utilisation de ce type de fonctions. est ce que c'est pour la programmation des systemes d'exploitation que ces fontions sont conçues?
j'espere que t'as compris.
merci
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
6 déc. 2007 à 13:47
Mum, aoreès coup c'est vrai que ca n'a pas tant a voir avec l'héritage en java ^^, je voulais juste trouver une image pour symboliser le fait que le fils hérite d'une certaine facon des variables d'environnement du père.

Sinon, estaquimby, quand tu dis que le père est obligé d'attendre le fils tu n'as pas totalement raison. C'est justement là l'utilité du fork et donc de la création de processus fils, le père peut (au choix), continuer sans attendre la fin de ses fils, ou les attendre.
Il peut très bien continuer à faire son traitement et rester à "l'écoute" de ses fils via les signaux (ce qui m'amène à dire que les processus peuvent discuter entre eux (et donc de père à fils et fils à père) de cette facon.
Tu dois maintenant voir l'utilité de cette utilisation, à savoir partager un traitement entre plusieurs ressources par exemple. Ce qui permet de diviser le travail en plusieurs partie et ainisi organiser un traitement, ou alors de lancer en parallèle plusieurs traitement pour aller plus vite.

Un exemple simple d'utilisation du fork : la mise en place d'un chat :
Tu aura un "programme" serveur qui aura pour charge d'écouter les connexions de programmes clients et à chaque clients qui se connecte, ce programme "père" lance un fils chargé de s'occuper du client qui se connecte. Ainsi tu aura autant de fils que de clients connectés, permettant ainsi d'envoyer les messages à tout le monde depuis le père.
C'est une explication assez simpliste et ce programme serait peu élaboré c'est sur, mais là encore c'est juste pour que tu comprennes l'utilité des threads en programmation.
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
6 déc. 2007 à 14:40
heu...?
pour moi thread et fork() n'ont rien à voir !
En thread, ce que tu dit est valable, signaux etc. Tu peux même partagé un certain nombre de variables, passer en argument lors du lancement du thread.
De ce que j'ai lu, un fork() fait une copie du processus à l'instant t où il est lancer. Ainsi, il y a deux processus disctinct, dont l'un a fork() qui renvoi 0 pour le père et 1 pour le fils.
Pour preuve de la différence, j'ai testé thread et fork, et la création du thread est beaucoup plus lente.
C'est dommage, je ne retrouve pas ma source qui expliquait cela... :(
toujours est-il que l'avantage des threads sont en grande partie valable pour les fork().
EDIT, source en partie : man fork()
-1