6
通常情况下,Control-C向程序发送一个sigint,如果它没有被捕获,则会终止它。 gnureadline库将安装sigint的处理程序。但是,即使在haskell中禁用这些处理程序时,我仍然需要敲两次Control-C来杀死一个程序。这是怎么回事?为什么gnu readline要求我两次打控制c?
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
这可能与煮熟/未煮熟/稀有终端模式有关; '^ C'并不总是发送信号。这可能是readline只在两个连续的'^ C'上产生一个SIGTERM。 – ehird 2011-12-23 19:47:14
哦,有趣。我不知道有关终端模式。我会检查一下readline是否做了一些事情。谢谢。 – archgoon 2011-12-23 19:49:34
我已将它稍微扩展为答案:) – ehird 2011-12-23 19:59:25