
#10081: SIGTERM ignored when process has been detached from terminal -------------------------------------+------------------------------------- Reporter: nakal | Owner: ekmett Type: bug | Status: new Priority: normal | Milestone: Component: Core Libraries | Version: 7.8.3 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: x86_64 Type of failure: Incorrect result | (amd64) at runtime | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by rwbarton): nakal: consider this program for instance {{{ import Control.Concurrent import Control.Exception import Control.Monad import System.Exit import System.IO import System.Posix.Signals loop = forever $ threadDelay 1000000 main = do ppid <- myThreadId mapM (\sig -> installHandler sig (Catch $ trap ppid) Nothing) [ keyboardSignal ] loop trap tid = do hPutStrLn stderr "Signal received.\n" throwIO Overflow throwTo tid ExitSuccess }}} If you run it in a terminal and press ctrl-C, you will see {{{ ^CSignal received. u: arithmetic overflow }}} and the program will keep running. ---- To catch the exception from `hPutStrLn` you can simply do {{{ import Control.Exception import Control.Concurrent import Control.Monad import System.Exit import System.IO import System.Posix.Signals loop = forever $ threadDelay 1000000 main = do ppid <- myThreadId mapM (\sig -> installHandler sig (Catch $ trap ppid) Nothing) [ lostConnection, keyboardSignal, softwareTermination, openEndedPipe ] loop trap tid = do let handler :: SomeException -> IO () handler _ = return () catch (hPutStrLn stderr "Signal received.\n") handler throwTo tid ExitSuccess }}} and now the program exits when run and killed as in your fourth test. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10081#comment:9 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler