Vérifier que mon fils est en vie avant de lui donner des ordres

Résolu/Fermé
Utilisateur anonyme - 27 févr. 2017 à 17:13
 Utilisateur anonyme - 6 mars 2017 à 12:40
Hello,

j'ai un semblant de serveur qui fait un fork(), et qui gère dans un processus fils les tache demander par le client qui viens s'y connecter tout bêtement.

le truc c’est que j'aimerais que mon serveur soit en mesure de s'assure en tout temps que son processus fils et donc son client est toujours vivant. je gère cela avec deux terminaux pour le moment l'un serveur l'autre client, si je fait ctrl+c sur mon client, mon serveur continue de le considérer en vie.

utiliser signal peut être ? mais comment ?

merci de votre aide

1 réponse

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
27 févr. 2017 à 21:42
bonsoir,
si je comprends bien, tu as sur ton serveur un processus parent et des processus fils.
chaque processus fils est en communication avec un processus exécuté sur une poste client.
que se passe-t-il quand tu arrêtes le processus client? le processus fils s’arrête-t-il sur le serveur, sans que le processus parent le remarque?
en d'autres mots, quel est ton soucis? le fait que le parent ne se rende pas compte que le fils est mort, ou bien que le fils ne se rende pas compte que le client est parti?
0
Utilisateur anonyme
27 févr. 2017 à 22:59
j'ai un serveur sur un terminal (un FTP très basique) qui attend des clients.
si un client ce connecte, mon serveur fait un fork pour gérer ce dernier.
client et serveur peuvent alors s’échanger message/cmd l'uns avec l'autre.
le tout ce termine quand l'utilisateur tape "exit" dans le terminal du client, car avec cette commande mon serveur comprend que le client viens d’être shutdown proprement.

sauf que si durant l’exécution du client l'utilisateur décide de stopper l’exécution en mode bourrin avec un ctrl+c mon serveur va ce mettre a attendre indéfiniment car il ne comprendra pas que le client a était shutdown.

j'ai besoin d'un système qui vérifie l’existence de mon processus fils, que ce soit avec son pid, son fd ou autre. j'ai entendue parler de signal mais je sait pas en quoi il peut m'aider .


pour répondre a tes questions : mon problème c'est que mon serveur (processus parent)
ne ce rend pas compte du décès du processus fils si ce dernier a était kill avec un ctrl+c autrement pas de problème.

j'espere etre assez claire. merci de ton aide
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > Utilisateur anonyme
27 févr. 2017 à 23:33
tu es clair, et je ne comprends pas.
il me semble que ce n'est pas le processus fils qui est killé, mais le processus client.
le kill est fait sur le client, et je pense que cela ne cause pas automatiquement la mort du processus fils sur le serveur.
tu aimerais bien que la mort du processus client cause la mort du processus fils, et que le parent s'en rende ensuite compte.
moi, je suspecte que le processus fils survit au processus client. qu'en penses-tu?
0
Utilisateur anonyme
28 févr. 2017 à 00:50
c'est exactement cela oui ! ta manière de l'expliquer m'a même remis sur le droit chemin.
je m’était imaginer bêtement que le processus fils crée dans le serveur me servais de support pour le client et donc qu'il n'y avait que 2 processus en marche (le pere et le fils) ...

mais alors comment faire pour que la mort de mon client tue mon fils en même temps ? (sans oublié que il s’agit ici d'une mort subite ctrl+c) , peut ont rattaché deux processus entre eux pour leur faire subir le même sort ?

j'attend tes idée avec impatience. merci.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > Utilisateur anonyme
28 févr. 2017 à 09:14
il faut que le fils détecte que la connexion avec le client est coupée ou que le client ne répond plus. quels sont les verbes utilisés par le fils pour établir et utiliser cette connexion? as-tu lu la documentation à ce sujet?
0
Bonjours, j'utilise la fonction accept() mais pas de select() pour créé mon fd
0