Normalnie Control-C wysyła sigint do programu i zabija go, jeśli nie zostanie przechwycony. Biblioteka gnureadline zainstaluje programy obsługi dla sigint. Jednak nawet po wyłączeniu tych procedur obsługi w haskell nadal muszę dwukrotnie nacisnąć Control-C, aby zabić program. Co się dzieje?Dlaczego readlinka gnu wymaga ode mnie dwukrotnego naciśnięcia klawisza 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
Może to być związane z gotowanymi/niegotowanymi/rzadkimi trybami zacisków; '^ C' nie zawsze wysyła sygnał. Mogłoby się zdarzyć, że readline powoduje, że SIGTERM występuje tylko na dwóch sekwencyjnych '^ C's. – ehird
Och, interesujące. Nie wiedziałem o tym w trybach terminalowych. Sprawdzę i zobaczę, czy readline coś z tym robi. Dziękuję Ci. – archgoon
Rozwinąłem to nieco do odpowiedzi :) – ehird