2008-10-26 6 views
5

어떻게 하스켈을 사용하여 하위 프로세스를 포크화할 수 있습니까?Haskell에서 부모 프로세스와 분기 된 자식 프로세스간에 데이터를 공유하는 방법은 무엇입니까?

또한 파이프가 데이터 공유 질문에 대한 분명한 해결책 인 경우 - 파이프를 사용하는 것 외에 다른 방법이 있습니까? 나는 C에서 공유 메모리 세그먼트 (shmget, * shmat, shmdt 및 shmctl 함수)의 사용에 익숙하다. 하스켈이 이것을 모방 할 수 있을까요? 그렇다면 어떻게?

남겨 둘 수있는 도움에 대해 매우 감사드립니다.

저는 하스켈에 관해서는 함수형 프로그래밍 언어에 대해 매우 새롭다는 것을 인정해야합니다. 그래서 내가 바보 같은 말을하면 용서해주세요.

+1

여기에 모두 대답은 "사용자의 토지 스레드를 분기"로 "자식 프로세스를 포크 (fork)"구문 분석 할 것 같다. 그러나 질문에 다른 맥락이 주어진다면 이것이 옳은 것처럼 보입니다. –

답변

0

실제로 프로세스, 유닉스 스타일의 포크 싶은 경우에, 당신이 필요 : 여기 http://book.realworldhaskell.org/read/software-transactional-memory.html

는 행동이 기술의 좋은 작은 예입니다 forkProcess을 다음과 같이 사용하십시오 : http://hackage.haskell.org/package/unix-2.4.2.0/docs/System-Posix-Process.html

이 경우 MVars와 TVars는 프로세스 간 통신을하지 않으므로 IPC를 수행 할 수 없습니다. IPC (파이프, 소켓 등)의 모든 표준 기술은 여전히 ​​작동합니다. 뭔가 더 높은 수준을 원하면 Cloud Haskell을 확인하십시오. http://www.haskell.org/haskellwiki/Cloud_Haskell

1

OP는 스레드가 아닌 서브 프로세스와 통신하는 것에 대해 질문했습니다. 이를 위해 파이프는 완벽하게 훌륭한 방법입니다. 원한다면 Haskell에서 직접 C 라이브러리 함수를 호출 할 수도 있지만, 까다로울 수는 있습니다.

이 질문은 여기에 더 나은 해답이 있습니다 Is there some standard Haskell library dealing with process communication?