Bonjour à tous,
fork() est-il portable sur windows X86_64 ?
JPD
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
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.
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]
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
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
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager