如何在cider-repl中终止进程?

21

当由于无限循环而陷入死锁状态时,我应该如何退出cider-repl?

发生这种情况时,我必须杀掉emacs,甚至重新启动计算机才能杀掉cider-repl。有更好的解决方法吗?

2个回答

16

按下组合键C-c C-c会从cider repl的顶层中断循环,同时保持emacs和repl运行。

在普通终端repl中,相应的组合键是C-c


正如您在上面的图像中所看到的,我定义了一个名为random-ints的函数,并使用“(def x (rest (random-ints 50)))”定义了一个符号x,因此x是一个无限集合。当我输入“(println x)”时,Emacs暂停了,我无法输入任何内容。所以我去终端并杀死了Emacs。 - cranehuang
@RenheHuang 我没有看到任何图片。 - Shawn Zhang
@ShawnZhang,非常抱歉。我有一张关于发生情况的截图,但是我无法上传它。所以我将"random-ints"描述如下:(defn random-ints [limit] (lazy-seq (cons (rand-int limit) (random-ints limit)))).其余内容在我的上一条评论中已经描述了。 - cranehuang
如果你运行 C-c C-c,Emacs 最终会取消正在循环的顶层 REPL 命令。如果它是一个紧密的循环,这将需要一段时间,如果它产生大量输出,则需要更长时间。但是,它最终会停止代码而不必杀死 Emacs。 - noisesmith
还可以尝试使用 C-c C-b, s X(在 Spacemacs 中重新启动 cider)C-g 在所有挂起的情况下都适用于紧急情况。 - HappyFace

1
当您正在编辑文件并已经连接到cider repl时,默认情况下,键入C-c C-c会运行cider-eval-defun-at-point,但是键入C-c C-b会运行cider-interrupt,它将取消正在评估的任何内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接