Gestion des processus Unix
Résolu/Fermé
don8
Messages postés
12
Date d'inscription
vendredi 21 novembre 2014
Statut
Membre
Dernière intervention
8 juillet 2015
-
6 juil. 2015 à 18:21
indigène_du_net - 27 juil. 2015 à 15:13
indigène_du_net - 27 juil. 2015 à 15:13
A voir également:
- Gestion des processus Unix
- Logiciel gestion photo gratuit - Guide
- Logiciel gestion locative gratuit excel - Télécharger - Comptabilité & Facturation
- Gestion autorisation application android - Guide
- Logiciel gestion cave à vin gratuit - Télécharger - Cuisine & Gastronomie
- Logiciel gestion association gratuit excel - Télécharger - Gestion de projets
2 réponses
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
11 juil. 2015 à 15:18
11 juil. 2015 à 15:18
Bonjour
je ne pense pas que la primitive wait() (sauf erreur de ma part) puisse éviter des zombies car elle suspend l'exécution du processus appelant jusqu'à ce que l'un de ses fils se termine mais ici en a plusieurs fils donc il est préférable d'utiliser par précaution waitid() qui fournit un contrôle plus précis sur les changements d'états des fils que l'on attend / waitpid()
à bientôt
je ne pense pas que la primitive wait() (sauf erreur de ma part) puisse éviter des zombies car elle suspend l'exécution du processus appelant jusqu'à ce que l'un de ses fils se termine mais ici en a plusieurs fils donc il est préférable d'utiliser par précaution waitid() qui fournit un contrôle plus précis sur les changements d'états des fils que l'on attend / waitpid()
à bientôt
chris79
Messages postés
97
Date d'inscription
lundi 3 octobre 2005
Statut
Membre
Dernière intervention
1 février 2016
25
Modifié par chris79 le 7/07/2015 à 22:18
Modifié par chris79 le 7/07/2015 à 22:18
Salut,
Je pense qu'avec une boucle while et un fork cela devrait le faire genre :
C'est juste pour l'algo...maintenant faut mettre les parenthèses et les points virgules ^^
Je pense qu'avec une boucle while et un fork cela devrait le faire genre :
//init nbDeFils=3 while nbDeFils { // Creation d'un fils pidRes=fork() if pidRes == 0 // Le fils. nbDeFils--; else // Le pere nbDeFils = 0 fi } } //exit
C'est juste pour l'algo...maintenant faut mettre les parenthèses et les points virgules ^^
don8
Messages postés
12
Date d'inscription
vendredi 21 novembre 2014
Statut
Membre
Dernière intervention
8 juillet 2015
8 juil. 2015 à 14:42
8 juil. 2015 à 14:42
Merci bcp chris79. Ca marche, sauf qu'il faut au préalable ajouter wait() avant nbDeFils = 0 à fin de permettre d'abord aux fils de s'exécuter.
Merci bcp
Merci bcp
chris79
Messages postés
97
Date d'inscription
lundi 3 octobre 2005
Statut
Membre
Dernière intervention
1 février 2016
25
8 juil. 2015 à 17:34
8 juil. 2015 à 17:34
Oui ça évite les zombies ^^
Modifié par chris79 le 11/07/2015 à 17:27
(Par contre si le père est déjà mort quand le fils se finit, le fils est temporairement adopté par un autre process (init) le temps de lire son code de retour...mais c'est pas la question ici).
La fonction wait() permet à un père d'attendre le premier fils qui meurt et de lire son code de retour.
Dans notre cas, un père n'a pas plus d'un fils donc wait() semble bien adapté à la situation.
13 juil. 2015 à 01:39
Certes la primitive est peut-être adaptée mais ici il est question de créer 3 fils donc la manière la plus optimal est un contrôle sur le statut des fils qui suspend par la même occasion le père ( qui est en attente de la mort de tous ces fils en claire est largement mieux adapté ).
De plus le code sources ou le pseudo-algorithme que vous avez fourni ne répond pas à la question poser sur la création de 3 fils sauf erreure de ma part. Voici une version qui est répond au mieux à ce qui a été demandé; reste à l'optimiser voir corriger et l'adapter aux besoins et sauf erreur de ma part elle crée bien le nombre exact de fils contrairement à votre solution.
à bientôt
13 juil. 2015 à 22:45
14 juil. 2015 à 13:26
Désoler si je n'ai pas compris au départ mais n'empêche que l'algorithme donné ou à implémenter n'est pas correct. Si l'on continue sur la lancer de l'algo à mon avis en crée beaucoup trop de fils parce que chaque père recrée des fils à chaque tour de la boucle while et non X processus souhaiter de plus en obtient pas une structure en arbre souhaité. Il ne suffit pas que de mettre des parenthèses et des points virgule pour obtenir un arbres Si c'est pour avoir un arbre de filiforme de x processus alors le code se présentera sous cette forme
ou
à bientôt
17 juil. 2015 à 15:38
D'abord merci pour tes remarques, c'est toujours intéressant de partager les points de vue ;)
Dans mon algo, le père ne recrée pas de fils à chaque boucle while ...ou alors un truc m'a échappé ;) (je bois pas mal de bières qd il fait chaud donc c'est pas impossible ^^)
Sinon je ne vois pas de différence entre mon algo (où il manquait le wait ...mais ça ne faisait pas partie de l'énoncé...I love zombie ^^) et ta dernière fonction à la différence près que tu utilises une boucle for et moi un while...
Ci-dessous mon algo dans une belle fonction :