module WaitForSignal where import Control.Concurrent.STM import System.Posix.Signals waitForTermSignal = do quitVar <- newEmptyTMVarIO installHandler sigTERM (CatchOnce (atomically $ putTMVar quitVar True)) Nothing installHandler sigINT (CatchOnce (atomically $ putTMVar quitVar True)) Nothing atomically $ takeTMVar quitVar