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
     ))

これがまだ行われていない場合。これが完了していれば、illusionoflife が示唆するように、プロセスを で中断できるはずですC-g

ただし、Emacs が非常に遅くなったり、応答しなくなったりする場合があります (システムは起動したプロセスに非常に高い優先度を与える場合があるため、優先度の高いブロッキング プロセスから制御が Emacs に戻るまで非常に長く待たなければなりません)。 . それでも、これはまだコンピューターを再起動する理由にはなりません。Linux では、ランレベル 3 で実行している可能性がありCtrl+Alt+1ます。

$ ps aux | grep "my process name"

これにより、実行できるIDが与えられると、そのIDから始まるプロセスに関する詳細が出力されます。

$ kill id

または、emacs のすべてのインスタンスと、そこから生成されたすべてのプロセスを単に kill することもできます。

$ killall emacs
于 2012-08-04T07:31:13.007 に答える