[Haskell-cafe] how to implement daemon start and stop directives?
Belka
lambda-belka at yandex.ru
Thu Jan 22 03:11:39 EST 2009
> You can abstract this pattern:
>
> -- runs its argument in an infinite loop, and returns an action that stops
> the loop
> daemon :: IO () -> IO (IO ())
> daemon action = do
> stopvar <- atomically $ newTVar False
> let run = do
> stop <- atomically $ readTVar stopvar
> if stop then return () else (action >> run)
> forkIO run
> return (atomically $ writeTVar stopvar True)
>
> TVars are overkill here, actually, an IORef would be just fine, I think.
>
> Luke
Thanks, Luke!
Why do you write "return (atomically $ writeTVar stopvar True)" in the end?
Actually, I'm more interested in technical details how to communicate from
shell with background process - how to send commands to it. Currently
looking into POSIX libraries hope to find answers there...
Also, maybe a FIFO-pipe-file would solve my problem. Imagine writing a
command in it, while one of daemon's thread is locked-while-awaits for
anything to come out from the other side of the pipe...
Belka
--
View this message in context: http://www.nabble.com/how-to-implement-daemon-start-and-stop-directives--tp21598690p21599567.html
Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.
More information about the Haskell-Cafe
mailing list