如何在ghci上安装清理处理程序:quit?

时间:2016-07-17 17:00:17

标签: haskell process signals ghci

在ghci中使用:quit:qCTRL+d时,就我所知,repl会终止而不会发出信号。

在这种情况下如何执行一些清理代码?我已经尝试安装了几个信号处理程序,看看是否可以解决这个问题,但它似乎并不像ghci那样使用它们:

Prelude> import System.Posix.Signals
Prelude System.Posix.Signals> installHandler sigINT (Catch $ print "cleanup (via INT)") Nothing
Prelude System.Posix.Signals> installHandler sigTERM (Catch $ print "cleanup (via TERM)") Nothing
Prelude System.Posix.Signals> :quit
Leaving GHCi.

我希望的结果是cleanup (..)被打印到控制台以表明它已被触发。

我知道可以使用:q覆盖:quit:def,但这并不能处理退出repl的首选方法,即{{1 }}

这个问题的上下文是这样的:我已经产生了一个进程来ssh隧道到运行不受保护的数据库的服务器。退出repl时此过程仍然存在,这迫使我每次都手动终止进程。

CTRL+d

1 个答案:

答案 0 :(得分:1)

在审阅文档后,我认为没有一个好方法可以做到这一点。你应该考虑自己深入研究ghci代码来实现这个功能。