很多时候,当我试图编译.hs
文件时,Emacs 23 Haskell模式会进入一个无休止的过程,并且不会显示任何响应。唯一会发生的事情是,光标变成一个圆圈,在这个圆圈内,点开始盘旋。
避免这种情况的最佳方法是什么?如果我陷入这种境地,我该如何脱身?目前,我重新启动电脑。请引导。
最近,发生了以下代码:
import Control.Monad
import Data.Char
main = do
putStrLn "This is an addition"
contents <- getContents
putStrLn $ (shortLinesOnly contents)
shortLinesOnly :: String -> String
shortLinesOnly input =
allLines = lines input
shortLines = filter (line -> length line < 10) allLines
res = unlines shortLines
in result
也许找到进行编译的函数并将其包装成类似的东西是有意义的
(with-local-quit
(with-timeout (60 (error "The process didn't finish in 60 seconds"))
;; do the calls to the compiler here
))
如果这还没有完成的话。如果已经完成了,那么,正如illionflife所建议的,您应该能够用C-g中断该过程。
然而,有时Emacs可能会变得太慢或太无响应(系统可能会对其启动的进程给予非常高的优先级,因此您将不得不等待很长时间,直到控制从具有高优先级的阻塞进程返回到Emacs)。不过,这还不是重新启动计算机的理由。在Linux上,您可能在运行级别3中运行,在这种情况下,您可以执行Ctrl+Alt+1或比运行X-server的shell少的任何数字,然后执行
$ ps aux | grep "my process name"
这将向您打印有关流程的一些详细信息,从其id开始,给定您可以执行的id:
$ kill id
或者,你可以杀死emacs的所有实例和由此产生的所有进程:
$ killall emacs
使用C-g
。您可以使用它来停止任何内部或外部同步进程。