@kyanny's blog

My thoughts, my life. Views/opinions are my own.

Emacs の中から実行されたゾンビプロセスをまとめて KILL する

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 に書いておいた。