Normal olarak, Control-C bir programa bir imza gönderir ve yakalanmadığında onu öldürür. Gnureadline kütüphanesi, sigint için işleyicileri kuracak. Bununla birlikte, bu işleyicileri haskell'de devre dışı bırakırken bile, bir programı öldürmek için Control-C'ye iki kez vurmam gerekiyor. Neler oluyor?Neden gnu readline kontrol c'ye iki kere vurmamı gerektiriyor?
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
Bu, pişmiş/pişmemiş/nadir terminal modları ile ilgili olabilir; '^ C' her zaman bir sinyal göndermez. Bu, bir SIGTERM'in sadece iki ardışık '^ C'de neden olmasına neden olabilir. – ehird
Oh, ilginç. Terminal modları hakkında bir şey bilmiyordum. Okuyucunun bununla bir şey yapıp yapmadığını kontrol edip göreceğim. Teşekkür ederim. – archgoon
Birazcık bir cevaba dönüştürdüm :) – ehird