IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation et administration système Perl Discussion :

Erreur avec fork


Sujet :

Programmation et administration système Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 46
    Points : 49
    Points
    49
    Par défaut Erreur avec fork
    Bonjour à tous

    Dans un programme je fais un appel à fork :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pid = fork or die "fork : $!\n";
    Il me retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fork : Repérage illégal
    J'ai beau chercher je ne trouve pas d'où peut venir le problème !

    Merci d'avance.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 161
    Points : 89
    Points
    89
    Par défaut
    je pense qu'il faut le définir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    defined ($pid = fork) or die "fork impossible";
    Enfin je sais pas si ca vient de ca mais ca ne coute rien d'essayer lol

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 46
    Points : 49
    Points
    49
    Par défaut
    Re-bonjour

    Grand merci, ça marche !

    A+

  4. #4
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Un petit peu d'explications ...

    Citation Envoyé par Nickname
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    defined ($pid = fork) or die "fork impossible";
    fork retourne une valeur, qui est le PId du fils dans le cas du processus père, 0 dans le cas du processus fils, ce qui permet de faire la distinction. Par contre, en cas d'échec du fork, la valeur retournée est indéfinie.

    Ainsi, en testant si le retour (donc $pid) est défini ("defined ($pid = fork)"), on sait si le fork a réussi ou non. Ensuite, plus tard, on testera la valeur de $pid pour savoir si l'on fait tourner le père ou le fils ...

    L'écriture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pid = fork or die "fork impossible";
    est incorrecte car insuffisante. Dans le cas du processus père, tout baigne, on passe à la suite, mais dans le cas du processus fils, aussi bien que de l'échec du fork, le résultat est nul ou indéfini, donc on enchaine sur le "or die" .


    Maintenant, si le problème est résolu, le tag idoine ([Résolu]) doit être apposé sur le sujet en utilisant le bouton du même nom, en bas à gauche de l'interface, pendant la visualisation du sujet.

    Bon Perl !


    [Edit]Correction de l'intervertion entre retour du fork pour le père et pour le fils [/Edit]
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  5. #5
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    A noter ce thread dans la FAQ.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 46
    Points : 49
    Points
    49
    Par défaut
    Merci beaucoup pour cette explication limpide, je débute donc quelques mécanismes internes du traitement des variables me sont un peu obscure !

    Juste une petite précision :

    Citation Envoyé par 2Eurocents
    Un petit peu d'explications ...

    Citation Envoyé par Nickname
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    defined ($pid = fork) or die "fork impossible";
    fork retourne une valeur, qui est un PId dans le cas du processus fils, 0 dans le cas du processus père, ce qui permet de faire la distinction. Par contre, en cas d'échec du fork, la valeur retournée est indéfinie.
    N'est ce pas plutôt dans le processus père que fork renvoi le PID du fils créé, et 0 dans le processus fils ?

    Merci
    A+

  7. #7
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Si, tout à fait

    C'est d'ailleurs logique ...
    Le processus fils peut interroger le système pour connaitre son propre PId, ainsi que celui de son père. Il est donc naturel que fork lui renvoie 0.
    Le processus père, lui, n'a aucun autre moyen de connaître sa filliation qu'avec le retour de fork.

    Comme quoi, il faut toujours se relire

    Je corrige mon post ...

    Merci !
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur Avec Interbase
    Par smokemon dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/10/2004, 07h24
  2. Erreur avec procédure LockWorkStation ...
    Par simonseztech dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 16/08/2004, 15h33
  3. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 15h45
  4. Erreur avec les ADO
    Par megane dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/03/2004, 21h37
  5. Erreur avec WM_COMMAND (BN_CLICKED)
    Par cyberlewis dans le forum Windows
    Réponses: 2
    Dernier message: 09/02/2004, 00h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo