eshelll なり shell-mode なりから呼んだプロセスが応答不能になってしまったときの殺し方。 C-c C-c などを送ってもダメな場合の話。
Emacs を終了しようとすると *Process List* バッファがでてきてプロセスを終了するかどうか一つずつ聞かれるけど、 Emacs は終了したくないしいちいち yes とタイプするのも面倒、とする。
eshell を起動して、
$ (list-processes) ; または C-c C-s Proc Status Buffer Tty Command ---- ------ ------ --- ------- sudo run *eshell*<2> /dev/ttyp0 /usr/bin/sudo perl ./cpan_install.pl server listen (none) (network stream server on /tmp/emacs501/server)
で *Process List* バッファが出てくる。しかしこれだと pid とかがわからないので、
$ (get-process "sudo") #<process sudo> $ (process-id (get-process "sudo")) 2221 $ sudo kill -9 2221
などとすると、そのプロセスだけ選んで殺せる。そのプロセスを呼んでいたバッファは残る(eshell などならプロンプトに戻っている)
思いついて調べ始めてやってみて成功したときは「なんてスマートなんだ!」と自画自賛したけど、こうやって書いてみるとかえって面倒くさいなぁ。ゾンビバッファが残るのが嫌な人向けかも。自分がそういうタイプ。