当我启动时
ghci> last [0..]
我可以使用Ctrl+C来中断它。
然而
ghci> last (repeat 0)
无法使用 Ctrl+C 中断。GHCI 会默默地忽略这些按键。
如何在 GHCI 中中断该命令?这是一个 bug 吗?
kill %1
来完成的,但您可以运行jobs
进行双重检查。killall -9 ghci
之类的操作,但这将导致更高的资源成本:您正在生成一些新的进程,打开X连接,执行初始化时终端所需的所有操作,执行初始化时shell所需的所有操作等。如果您处于我经常遇到的情况——ghci正在频繁交换——那么这只会让ghci有更多时间搞砸事情。-fno-omit-yields
来要求GHC在紧密的、非分配循环内部插入Ctrl+C检查。Ctrl+Z
看起来离开了 shell,但它并没有完全关闭进程。
例如
$ 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
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
注: 在Linux(Ubuntu 16.04 LTS)上进行测试。
kill
或类似工具清理Ctrl+Z留下的剩余进程,如我的答案所述。 - Daniel WagnerCtrl+D
并没有关闭我的ghci
。 - Student
last (repeat 0)
! - Daniel Wagner