mueval-0.8: watchdog.hs
-- | This implements a watchdog process. It calls mueval with all the
-- user-specified arguments, sleeps, and then if mueval is still running
-- kills it.
-- Even an out-of-control mueval will have trouble avoiding 'terminateProcess'.
-- Note that it's too difficult to parse the user arguments to get the timeout,
-- so we specify it as a constant which is a little more generous than the default.
module Main where
import System.Environment
import Control.Concurrent
import System.Process
import System.Exit
main :: IO ()
main = do args <- getArgs
hdl <- runProcess "mueval-core" args Nothing Nothing Nothing Nothing Nothing
_ <- forkIO $ do
threadDelay (7 * 700000)
status <- getProcessExitCode hdl
case status of
Nothing -> terminateProcess hdl >> exitWith (ExitFailure 1)
Just a -> exitWith a
stat <- waitForProcess hdl
exitWith stat