miniplex-0.2.1: bin/plox-write.hs
import qualified System.Miniplex as MP
import System.Environment
import System.Exit
import System.IO
import System.Posix.Process
import System.Posix.Signals
usage :: IO ()
usage = do
self <- getProgName
hPutStr stderr $ "Usage: " ++ self ++ " TAG\n"
exitFailure
main :: IO ()
main = do
installHandler floatingPointException (Catch (raiseSignal internalAbort)) Nothing
installHandler openEndedPipe Ignore Nothing
args <- getArgs
case args of
[tag] -> MP.withSink tag service
_ -> usage
service :: MP.Sink -> IO ()
service s = do
mapM_ (\x -> installHandler x (Catch (hdl x)) Nothing) signals
t <- getContents
mapM_ (MP.write s) (lines t)
where
hdl sig = do
MP.destroy s
installHandler sig Default Nothing
raiseSignal sig
exitImmediately (ExitFailure 127)
signals = [sigINT, sigALRM, sigTERM, sigUSR1, sigUSR2]