Comment partager des données entre un processus enfant parent et un processus fourché dans Haskell?

StackOverflow https://stackoverflow.com/questions/238379

  •  04-07-2019
  •  | 
  •  

Question

Comment pourrais-je même créer un processus enfant en utilisant Haskell?

En outre, si les tubes constituent une solution évidente à la question du partage des données, existe-t-il un autre moyen de le faire en dehors de l’utilisation des tubes? Je connais bien l'utilisation de segments de mémoire partagée en C (fonctions shmget, * shmat, shmdt et shmctl). Haskell pourrait-il imiter cela? Si oui, comment?

Je serais très reconnaissant pour toute aide que vous pourriez épargner.

Je dois admettre que je suis très novice dans les langages de programmation fonctionnels, encore plus en ce qui concerne Haskell. Alors pardonnez-moi (et corrigez-moi s'il vous plaît) si j'ai dit une bêtise.

Était-ce utile?

La solution

Mieux encore, utilisez la mémoire logicielle transactionnelle, c'est-à-dire les chaînes TVars et TChannels.

Recommandera le même livre, chapitre différent: http: // book. realworldhaskell.org/read/software-transactional-memory.html

Voici un bon petit exemple de cette technique en action: http://sequence.complete.org / node / 257

Autres conseils

Le PO a demandé à communiquer avec un sous-processus, pas un thread. Pour cela, les pipes sont une manière parfaite de le faire. Vous pouvez également appeler la fonction de bibliothèque C directement à partir de Haskell si vous le souhaitez, bien que cela puisse être compliqué.

Cette question a une meilleure réponse ici: Existe-t-il une bibliothèque Haskell standard traitant de la communication de processus?

utilisez MVars ou des canaux. Voir le chapitre 24 de RealWorld Haskell:    http://book.realworldhaskell.org/read/concurrent-and- multicore-programming.html

Si vous voulez réellement brancher un processus de style Unix, vous devez utiliser forkProcess comme indiqué par http://hackage.haskell.org/package/unix-2.4.2.0/docs/System-Posix-Process.html

Dans ce cas, MVars et TVars ne font pas de communication interprocessus, vous ne pouvez donc pas les utiliser pour faire de l'IPC. Toutes les techniques standard pour l'IPC (tuyaux, sockets, etc.) fonctionnent toujours. Si vous voulez quelque chose de plus haut niveau, consultez Cloud Haskell http://www.haskell.org/haskellwiki/ Cloud_Haskell

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top