Normalmente, Control-C invia un sigint a un programma e lo uccide se non viene rilevato. La libreria gnureadline installerà i gestori per sigint. Tuttavia, anche disabilitando quei gestori in haskell, devo comunque premere Control-C due volte per uccidere un programma. Cosa sta succedendo?Perchè gnu readline mi richiede di colpire il controllo c due volte?
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
Questo può essere correlato a modalità terminale cotte/non cotte/rare; '^ C' non invia sempre un segnale. Potrebbe essere che readline causi un SIGTERM solo su due 'sequenziali' 'C '. – ehird
Oh, interessante. Non lo sapevo delle modalità terminali. Controllerò e vedrò se readline fa qualcosa con quello. Grazie. – archgoon
L'ho ampliato leggermente in una risposta :) – ehird