如何在GHCI中止执行?

时间:2015-06-16 19:59:59

标签: haskell ghci

当我启动时

ghci> last [0..]

我可以用Ctrl + C打断它。

然而

ghci> last (repeat 0)

无法使用Ctrl + C中止。 GHCI默默地忽略了击键。

如何在GHCI中中止此命令?这是一个错误吗?

3 个答案:

答案 0 :(得分:10)

(警告:我使用Linux,并在urxvt或gnome-terminal上运行zsh。如果你使用不同的操作系统,终端或shell,这可能会对你有所不同。)

我通常处理这种方法的方法是按Ctrl + Z(将其置于后台,完全暂停执行作为副作用)然后终止作业。通常这是kill %1,但您可以运行jobs来仔细检查。

您也可以启动一个新终端并执行类似killall -9 ghci的操作,但这会产生更高的资源成本:您正在生成一些新进程,打开X连接,执行终端所做的任何事情。初始化自己,做你的shell在初始化时做的任何事情,等等。如果你遇到这种情况,我经常发现自己 - ghci正在疯狂交换 - 这只会让ghci有更多的时间搞砸了。 / p>

答案 1 :(得分:1)

Ctrl+Z seems to leave the shell, but it doesn't entirely close the process.

For Example

$ ghci
GHCi, version 7.10.3: http://www.haskell.org/ghc/  :? for help
Prelude> 
[4]+  Stopped                 ghci
$ ps
  PID TTY          TIME CMD
 3160 pts/1    00:00:00 bash
 3554 pts/1    00:00:21 emacs
 5602 pts/1    00:00:00 ghc
 5693 pts/1    00:00:00 ps

However if you do Ctrl+D

$ ghci
GHCi, version 7.10.3: http://www.haskell.org/ghc/  :? for help
Prelude> 
Leaving GHCi.
$ ps
  PID TTY          TIME CMD
 3160 pts/1    00:00:00 bash
 3554 pts/1    00:00:21 emacs
 5870 pts/1    00:00:00 ps

So the proper way to close haskell-shell is to hit Ctrl+D.

Note: Tested on Linux (Ubuntu 16.04 LTS)

答案 2 :(得分:0)

您可以使用:quit命令退出GHCI

Prelude> :quit
Leaving GHCi.

或按sends EOF signal Control + D

如果GHCI忙,您别无选择,只能手动终止该进程。