OVH Cloud OVH Cloud

Pb pour tester fork()

1 réponse
Avatar
philippe.louboutin
Bonjour à tous,

Voilà j'ai un problème avec la fonction fork(). Je connais le schéma
bien connu de cette fonction, à savoir :

pid_t pid;
pid = fork();
if(pid>0)
{/*processus père*/}
if(pid==0)
{/*processus fils*/}
else
{/*Traitement des erreurs*/}

Mon code est le suivant (code du programme serveur):

...
if ( !fork() ) // On est dans le processus fils
{
defaultchld(); // Initialisation de signaux
processid = getpid();
dialogue( socket_client ); // On lit et on écrit sur le socket
shutdown( socket_client , SHUT_RDWR ); // Fermeture du socket
client (en émission et réception)
exit( 0 );
}
else // On est dans le processus père ou il y a eu une erreur lors
du fork()
{
close( socket_client );
}
...

Voilà, l'autre jour j'ai eu un problème : je me connecte à partir de
mon PC sur une machine unix distante. Sur mon pc, j'ouvre un socket et
j'envoie sur celui-ci une commande, qui lorsqu'elle est reçue au
niveau du serveur, est exécutée. Depuis j'ai un peu modifié mon
programme pour arriver à celui ci-dessus (j'avais pas mis de "else").
En effet, la machine unix a planté, mais je ne sais toujours pas
pourquoi !

Ma question est donc la suivante : pour quelle(s) raison(s) la machine
unix a planté ? De plus, y a t'il un moyen de tester la fonction
fork() (et donc de savoir si le programme ci-dessus est correct et ne
fera planter à nouveau la machine unix...) ? Si oui lequel, parce que
là j'en peu plus et je vois pas comment faire pour savoir d'où vient
le bug.

Merci d'avance pour vos réponses. A+

Phil

1 réponse

Avatar
Marc Boyer
Philippe wrote:
Bonjour à tous,

Voilà, l'autre jour j'ai eu un problème : je me connecte à partir de
mon PC sur une machine unix distante. Sur mon pc, j'ouvre un socket et
j'envoie sur celui-ci une commande, qui lorsqu'elle est reçue au
niveau du serveur, est exécutée. Depuis j'ai un peu modifié mon
programme pour arriver à celui ci-dessus (j'avais pas mis de "else").
En effet, la machine unix a planté, mais je ne sais toujours pas
pourquoi !

Ma question est donc la suivante : pour quelle(s) raison(s) la machine
unix a planté ?


Heuh... Difficile à dire comme ça.
Puisque tu as la maîtrise des sources, ne peux-tu pas le
recompiler avec une option de débug, puis examiner le core
avec ton débugger préféré.

Non ?

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(