packages feed

reanimate-1.1.3.0: unix/Detach.hs

module Detach (detach) where

import           Control.Concurrent
import           Control.Monad
import           System.Posix.IO
import           System.Posix.Process (createSession, forkProcess)

detach :: IO () -> IO Bool
detach daemon = do
  void $ forkProcess $ do
    devnull <- openFd "/dev/null" ReadWrite Nothing defaultFileFlags
    void $ dupTo devnull stdInput
    void $ dupTo devnull stdOutput
    void $ dupTo devnull stdError
    closeFd devnull
    void createSession
    void $ forkProcess daemon
  threadDelay (10^(6::Int))
  return True