Normalmente, Control-C envía un sigint a un programa y lo elimina si no se detecta. La biblioteca gnureadline instalará controladores para sigint. Sin embargo, incluso cuando deshabilite esos manejadores en haskell, aún necesito presionar Control-C dos veces para matar un programa. ¿Que esta pasando?¿Por qué gnu readline requiere que presione el control c dos veces?
import System.Console.Readline
main = do
setCatchSignals False
mainLoop
mainLoop = do
maybeLine <- readline ">"
case maybeLine of
Nothing -> putStrLn ":("
Just line -> do
putStr line
putStr " catch:"
catch <- getCatchSignals
putStrLn $ show $ catch
mainLoop
Esto puede estar relacionado con los modos de terminal cocido/crudo/raro; '^ C' no siempre envía una señal. Podría ser que readline causa un SIGTERM solo en dos '^ C's secuenciales. – ehird
Oh, interesante. No sabía eso sobre los modos de terminal. Comprobaré y veré si readline hace algo con eso. Gracias. – archgoon
Lo he expandido un poco en una respuesta :) – ehird