2008-10-26 2 views
5

Как я мог бы сначала развернуть детский процесс с использованием Haskell?Как можно делиться данными между родительским и разветвленным дочерним процессом в Haskell?

Кроме того, если трубы являются очевидным решением вопроса об обмене данными - есть ли другой способ сделать это, кроме использования труб? Я знаком с использованием сегментов разделяемой памяти в C (функции shmget, * shmat, shmdt и shmctl). Может ли Хаскелл подражать этому? Если да, то как?

Я был бы очень признателен за любую помощь, которую вы могли бы сэкономить.

Должен признаться, что я очень новичок в функциональных языках программирования, тем более, когда речь заходит о Haskell. Так простите меня (и, пожалуйста, поправьте меня), если я скажу что-то глупое.

+1

Оба ответа здесь, как представляется, разбор «разветвления дочернего процесса» как «разветвление земельной нити пользователя». Но, учитывая другой контекст в вопросе, это кажется неправильным. – 2014-02-21 10:04:07

ответ

0

Если вы хотите на самом деле раскошелиться процесс, стиль Unix, вам нужно используйте forkProcess, как указано http://hackage.haskell.org/package/unix-2.4.2.0/docs/System-Posix-Process.html

В этом случае MVars и TVars не осуществляют межпроцессное взаимодействие, поэтому вы не можете использовать их для IPC. Все стандартные методы для IPC (трубы, сокеты и т. Д.) Все еще работают. Если вы хотите что-то более высокоуровневое, ознакомьтесь с облачным Haskell http://www.haskell.org/haskellwiki/Cloud_Haskell

1

ОП попросил об общении с подпроцессом, а не с потоком. Для этого трубы прекрасно подходят для этого. Вы также можете вызвать функцию библиотеки C непосредственно из Haskell, если хотите, хотя это может стать сложным.

Этого вопрос имеет лучший ответ здесь: Is there some standard Haskell library dealing with process communication?

Смежные вопросы