当我启动时
ghci> last [0..]
我可以用Ctrl + C打断它。
然而
ghci> last (repeat 0)
无法使用Ctrl + C中止。 GHCI默默地忽略了击键。
如何在GHCI中中止此命令?这是一个错误吗?
答案 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忙,您别无选择,只能手动终止该进程。