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

Langage Perl Discussion :

Exec() / Comparaison Unix et Windows


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Exec() / Comparaison Unix et Windows
    Bonjour,

    Je constate actuellement que l'utilisation du exec() est differente sur un systeme Unix d'un systeme Windows.

    Dans la definition, exec remplace le processus pere par le processus fils, chose respectee sous UNIX. Par contre, sur Windows, sous une fenetre d'invite de commandes dos, au moment du exec(), la fenetre rend l'invite de commande... alors que le nouveau processus n'est pas termine. De plus ce nouveau processus n'a pas remplace le precedent (pid different).

    Je voulais savoir si d'autres personnes avaient deja rencontrees ce probleme.
    A savoir que le probleme est le meme avec un programme en langage C++. Ce qui me laisse penser que l'interpretation d'un exec sous windows est erronee.

    Si d'autres personnes ont deja rencontrees le probleme, et ont une solution pour le contourner (utilisation d'une API, etc).

    Merci d'avance,

    ++

  2. #2
    Membre habitué

    Profil pro
    Inscrit en
    Août 2005
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 118
    Points : 142
    Points
    142
    Par défaut
    Bonjour,
    La réponse est simple : Windows ne gère pas les processus comme Unix.

    Sous unix le processus fils est attaché au processus père (Typiquement, tu n'as pas la main sur la console avant la fin du processus fils). Sous Windows les processus ne sont (en gros) attachés qu'au processus qui en fait la demande (notion de handle).

    ça c'est la théorie.

    La fonction exec 'ne retourne pas' -
    The exec function executes a system command and never returns
    Elle lance un processus.

    http://search.cpan.org/~rgarcia/perl...Perl_Functions


    Donc si tu attend un _retour_ (même une fin) peut-être vaut-il mieux utiliser system

    Joris

  3. #3
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Non, je pense que quand Padawan parle de retour il pense au fait que normalement, si un script appelé sur la ligne de commande utilise exec(), l'invite de commande ne doit pas revenir avant que la commande lancé par exec() ait fini.

    Mais sous Windows, il n'est pas possible de faire un "vrai" exec(), Windows gère les processus différemment, en particulier on ne peut pas changer le code exécuté par un processus. Sous Unix toute la création de processus est fondé sur le couple fork()/exec(), mais Windows ne fonctionne pas du tout comme ça. Par conséquence les émulations de exec() ou de fork() sous Windows n'ont pas un comportement très unixiens, désolé. On ne peut pas y faire grand chose.

    --
    Jedaï

  4. #4
    Membre habitué

    Profil pro
    Inscrit en
    Août 2005
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 118
    Points : 142
    Points
    142
    Par défaut
    Non, je pense que quand Padawan parle de retour il pense au fait que normalement, si un script appelé sur la ligne de commande utilise exec(), l'invite de commande ne doit pas revenir avant que la commande lancé par exec() ait fini.
    Peut-être ce que j'ai dis semble confus.

    En utilisant system au lieu d'exec, sous windows, on obtiens le même comportement qu'un exec sous unix.

    Sous windows :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    exec 'notepad.exe'
    Rends la main tout de suite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    system 'notepad.exe'
    Rends la main quand le bloc note est fermé.

    Joris

  5. #5
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Ok, si tu voulais dire cela, nous sommes d'accord, cependant ce n'est pas le même comportement, en dehors du fait que sémantiquement , il faut rajouter un exit() après le system() pour obtenir un comportement proche de exec(), en pratique le system() n'a à peu près aucun des avantages de exec(), puisque le processus père continue à exister et à prendre de la place.

    Néanmoins si le seul ennui est effectivement le comportement en console il va de soi que system() n'a pas ce problème puisque le processus père (qui a sa console) continue à être exécuté.

    --
    Jedaï

Discussions similaires

  1. librairies C unix et windows
    Par PhilYves dans le forum C
    Réponses: 3
    Dernier message: 29/11/2005, 15h31
  2. choix: implementation oracle sous unix ou windows ?
    Par marcalexis dans le forum Oracle
    Réponses: 25
    Dernier message: 23/09/2005, 15h18
  3. Réponses: 4
    Dernier message: 29/08/2005, 17h42
  4. existe-il un LDAP gratuit compatible Unix et Windows ?
    Par lalakers dans le forum Développement
    Réponses: 4
    Dernier message: 19/08/2005, 13h17
  5. [Process] pb exec sous unix, ne plante pas mais ne fait rien
    Par NiBicUs dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 10/12/2004, 05h27

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