4

很多时候,当我尝试编译一个.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
4

2 回答 2

3

也许找到进行编译的函数并将其包装成如下内容是有意义的:

(with-local-quit
  (with-timeout (60 (error "The process didn't finish in 60 seconds"))
     ;; do the calls to the compiler here
     ))

如果这还没有完成。如果这已经完成,那么,正如幻象所建议的那样,您应该能够使用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
于 2012-08-04T07:31:13.007 回答
0

使用C-g. 您可以使用它来停止任何内部或外部同步过程。

于 2012-08-04T07:12:46.417 回答