[Haskell-cafe] forkProcess, forkIO, and multithreaded runtime

Kazu Yamamoto ( 山本和彦 ) kazu at iij.ad.jp
Tue Oct 16 03:04:05 CEST 2012


> My understanding is that System.Process avoids these problems by doing
> all the setup around forking a command in C code. I've banished
> forkProcess from my code base entirely, except for a double fork I need
> to daemonize, and I don't even trust that call. :/

I think you are right. forkProcess is necessary to deamonize a process
but I don't know other usage.

daemonize :: IO () -> IO ()
daemonize program = ensureDetachTerminalCanWork $ do
    detachTerminal
    ensureNeverAttachTerminal $ do
        changeWorkingDirectory "/"
        void $ setFileCreationMask 0
        mapM_ closeFd [stdInput, stdOutput, stdError]
        program
  where
    ensureDetachTerminalCanWork p = do
        void $ forkProcess p
        exitSuccess
    ensureNeverAttachTerminal p = do
        void $ forkProcess p
        exitSuccess
    detachTerminal = void createSession

--Kazu




More information about the Haskell-Cafe mailing list