当Emacs 23 Haskell编译(C-C-l)进入无休止的过程时该怎么办



很多时候,当我试图编译.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。您可以使用它来停止任何内部或外部同步进程。

最新更新