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

C Discussion :

fork est-il portable sur windows X86_64 ?


Sujet :

C

  1. #1
    Membre régulier Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Points : 119
    Points
    119
    Par défaut fork est-il portable sur windows X86_64 ?
    Bonjour à tous,


    fork() est-il portable sur windows X86_64 ?



    JPD
    Petit Malin
    "accélérateur . . . qui pousse . . . un électron a passer par deux trous d’un écran en même temps." (Cyrille Burt: "C’est mieux qu’un fantôme") (Janus p.251)
    "Joy is to love what is, pain is to love what is not"
    )

    HP Pavilion Elite Desktop PC 570-p0xx - Window10 64 bits - Intel(R) Core(TM)2 Quad CPU Q8200 @ 3GHz x86_64-w64-mingw32-gcc-7.3.0.exe

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    fork pour ?
    Créer un processus ? CreateProcess
    Créer un thread ? CreateThread

    Portable signifie quoi pour toi ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 687
    Points : 30 980
    Points
    30 980
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Le principe du fork tel que vu sur Unix/Linux (dupliquer un processus dans un environnement neuf et distinct) n'existe pas sous Windows qui a préféré utiliser une autre technologie basée sur les thread (un seul processus qui lance plusieurs "tâches" distinctes mais partageant toutes le même environnement).
    Au résultat de base c'est la même chose. Tu peux faire plusieurs choses à la fois. Ce qui change c'est quand tu veux faire communiquer tes trucs entre eux. Sur Unix/Linux les environnements distincts t'imposent de passer par un outil de communication externe (msq, shm, pipe, socket) tandis que sous Windows, comme ils partagent le même environnement tous ont accès à la même mémoire. Et aussi quand ça commence à partir en couilles (sur Unix/Linux la fin d'un processus n'interromp pas les autres tandis que sous Windows, si le processus principal meurt, tout meurt avec lui).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 440
    Points : 43 082
    Points
    43 082
    Par défaut
    fork sous Linux est un peu comme createprocess sous Windows, à la différence que fork clone le process en cours,createprocess en crée directement un vierge. fork n'est pas utilisé tout seul, on l'utilise en complément d'une fonction de la famille exec (execve, execcl) qui elle va remplacer l’espace d'adressage dans le processus fils par le programme passé en paramètre à execve ou autre fonction exec. Sous Windows, on passe directement le programme à lancer à createprocess.

    Les infos ci-dessous sont je pense valables pour Windows et linux:

    Chaque processus a son propre contexte d’exécution (donc sa propre pile, son espace d'adressage, ses fichiers ouverts, etc.). Le processus nouvellement crée est le processus fils, le processus depuis lequel il a été créé le processus père. Si le père meurt, ce n'est pas forcément le cas du fils (sous Linux on peut jouer sur ce comportement via les signaux voir ici post 3 de Sver). Je pense que ceci est similaire sous Windows.
    Un thread, c'est un sous-processus qui partage le même contexte d''exécution avec les autres threads du processus, sauf que chaque thread d'un processus a sa propre pile.

    Pour répondre à la question, fork n'est pas utilisé sous Windows. Mais si tu fais de la cross-compilation, tu pourras néanmoins l'appeler depuis cygwin , peut-être aussi avec MinGW.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Membre régulier Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Points : 119
    Points
    119
    Par défaut
    J4e8a16n, vous n'avez pas la permission d'accéder à cette page. Ceci peut être dû à plusieurs raisons :


    euh....
    Petit Malin
    "accélérateur . . . qui pousse . . . un électron a passer par deux trous d’un écran en même temps." (Cyrille Burt: "C’est mieux qu’un fantôme") (Janus p.251)
    "Joy is to love what is, pain is to love what is not"
    )

    HP Pavilion Elite Desktop PC 570-p0xx - Window10 64 bits - Intel(R) Core(TM)2 Quad CPU Q8200 @ 3GHz x86_64-w64-mingw32-gcc-7.3.0.exe

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    J'ai entendu dire que techniquement, l'API native de Windows NT supportait les fonctions nécessaires pour forker un processus (i.e. créer un nouveau processus avec toutes les pages mémoire du premier, marquées Copy-On-Write, et au même point d'exécution que le premier*). Mais ces fonctions (RtlCloneUserProcess() etc.) ne sont pas exposées par l'API Win32 (et ne sont pas documentées). Elles sont en revanche, utilisées dans l'implémentation de Windows Subsystem for Linux, ce qui pour toi serait probablement le meilleur pari pour faire marcher un programme qui dépend de fork() et son fonctionnement).
    Quant à Cygwin, qui date d'avant WSL, son implémentation de fork() est une usine à gaz.

    Conclusion: Si tu as un programme qui dépend de fork() et que tu veux le faire marcher sous Windows, utilise Windows Subsystem for Linux.

    *En y repensant, j'ignore comment ça interagit avec le multi-thread...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/02/2016, 11h57
  2. Réponses: 10
    Dernier message: 10/02/2013, 16h18
  3. Réponses: 2
    Dernier message: 11/09/2009, 18h24
  4. Etude : aujourd'hui un portable sur cinq est un Netbook
    Par Gordon Fowler dans le forum Actualités
    Réponses: 3
    Dernier message: 04/09/2009, 12h04
  5. Installation Debian sur portable avec Windows XP
    Par lodan dans le forum Debian
    Réponses: 7
    Dernier message: 15/07/2007, 08h11

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