2008-10-26 13 views
5

Comment pourrais-je commencer à forger un processus enfant en utilisant Haskell en premier lieu?Comment partager des données entre un processus parent et un processus fils forked dans Haskell?

De plus, si les tuyaux constituent une solution évidente à la question du partage de données, y a-t-il une autre façon de le faire en plus d'utiliser des tuyaux? Je connais l'utilisation de segments de mémoire partagée dans C (les fonctions shmget, * shmat, shmdt et shmctl). Haskell pourrait-il imiter cela? Si c'est le cas, comment?

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

Je dois admettre que je suis très nouveau dans les langages de programmation fonctionnels, et encore plus quand il s'agit de Haskell. Alors pardonnez-moi (et corrigez-moi s'il vous plaît) si j'ai dit quelque chose d'idiot.

+1

Les deux réponses semblent ici être l'analyse syntaxique « bifurquer un processus enfant » comme « bifurquer un fil de terre de l'utilisateur ». Mais étant donné le contexte dans la question, cela ne semble pas correct. –

Répondre

0

Si vous voulez à la fourchette en fait un processus, le style Unix, vous devez utilisez 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 n'effectuent pas de communication interprocessus, vous ne pouvez donc pas les utiliser pour effectuer un IPC. Toutes les techniques standard pour IPC (tuyaux, douilles, etc.) fonctionnent toujours. Si vous voulez quelque chose de plus haut niveau, consultez Cloud Haskell http://www.haskell.org/haskellwiki/Cloud_Haskell

1

L'OP a demandé à propos de la communication avec un sous-processus, pas un fil. Pour cela, les tuyaux sont une façon parfaite de le faire. Vous pouvez également appeler la fonction de bibliothèque C directement depuis Haskell si vous le souhaitez, bien que cela puisse être difficile.

Cette question a une meilleure réponse ici: Is there some standard Haskell library dealing with process communication?