Emacs の中から呼んだプロセスが応答不能になったときの殺し方 - 刺身☆ブーメランのはてなダイアリー よりずっとスマートな方法を見つけた。 podstrip WWW::Mechanize | grep VERSION したらなんか変なエラー?になってうまくいかず grep のプロセスがいくつもできてしまって困ったのだけど、怪我の功名?
(mapcar (lambda (x) (kill-process x)) (process-list))
これでうまくいく。 emacsclient を使うための (server-start) で起動している server プロセスは残り、それ以外に立ち上がっていたプロセスがまとめて消える。一個ずつプロセス ID を調べたりする手間が省ける。 map 関数とか使ってできそうだな、と思って describe-function してみたけどなんか微妙で、軽くぐぐって mapcar でやったらうまくいった。差とかよくわからないな。
Process server is not a subprocess とかでていた。なるほどサブプロセス以外は消すのに特権が必要ってことかな。よくわかる。
kill-all-subprocesses とか関数作って .emacs.el に書いておいた。