web-dev-qa-db-ja.com

GHCIで実行を中止する方法は?

起動すると

ghci> last [0..]

Ctrl + Cで中断できます。

しかしながら

ghci> last (repeat 0)

ctrl + Cで中止することはできません。 GHCIは静かにキーストロークを無視します。

GHCIでこのコマンドを中止するにはどうすればよいですか?バグですか?

15
ominug

(警告レクター:私はLinuxを使用しており、urxvtまたはgnome-terminalでzshを実行しています。別のオペレーティングシステム、ターミナル、またはシェルを使用している場合は、動作が異なる可能性があります。)

私が通常これを処理する方法は、Ctrl + Z(バックグラウンドに置き、副作用として実行を完全に一時停止します)を押してから、ジョブを強制終了することです。通常、これはkill %1ですが、jobsを実行して再確認することもできます。

新しい端末を起動してkillall -9 ghciのようなことを行うこともできますが、これにははるかに高いリソースコストがかかります。いくつかの新しいプロセスを生成し、X接続を開き、端末が初期化するときに行うことをすべて実行します。シェルがそれ自体を初期化するときなど、シェルが行うことは何でもします。あなたが状況にある場合、私はしばしば自分自身を見つけます-ghciは狂ったように交換しています-それはghciに物事を台無しにするためのより多くの時間を与えます。

11
Daniel Wagner

Ctrl+Zはシェルを離れているようですが、プロセスを完全に終了するわけではありません。

例えば

$ ghci
GHCi, version 7.10.3: http://www.haskell.org/ghc/  :? for help
Prelude> 
[4]+  Stopped                 ghci
$ ps
  PID TTY          TIME CMD
 3160 pts/1    00:00:00 bash
 3554 pts/1    00:00:21 emacs
 5602 pts/1    00:00:00 ghc
 5693 pts/1    00:00:00 ps

ただし、Ctrl+Dを実行すると

$ ghci
GHCi, version 7.10.3: http://www.haskell.org/ghc/  :? for help
Prelude> 
Leaving GHCi.
$ ps
  PID TTY          TIME CMD
 3160 pts/1    00:00:00 bash
 3554 pts/1    00:00:21 emacs
 5870 pts/1    00:00:00 ps

したがって、haskell-Shellを閉じる適切な方法は、Ctrl+Dを押すことです。

:Linuxでテスト済み(Ubuntu 16.04 LTS)

1
Abhisek