Vim+QuickRunでsinatraがフリーズした際の停止方法(mac)

Vim+QuickRun便利です。

でも、sinatraなど、実行しつづけるプロセスを起動すると、
固まって戻ってこなくなっちゃいます。

そんな時はpsコマンドでプロセスIDを調べてKillするといい、
という風にGoogle先生が言ってました。

psコマンドだけで幸せは来るか

そこで、sinatraが固まった後でps コマンドを入力してみます。

$ ps
実行結果は次のとおり。
https://img.skitch.com/20120301-x8qgkb57pn2yjjk1xgnbr4gybp.jpg

ないですね。

このあと、Vimを再起動してQuickRunしても、返ってくるのは、
こんなメッセージです。

== Someone is already performing on port 4567!

オイラはこの後どうしていいかわからなかったので、再起動とかしてました。
コレを読んでいるあなたは、そんな事しないで下さいね。

プロセスの見つけ方

この問題を解決するのに、ちょうどいいサイトを見つけました。これです。
http://groups.google.com/group/sinatrarb/browse_thread/thread/e34efc83e708576a

これによると、次のコマンドで、sinatraのプロセスが見つかるとの事です。
ps aux | grep ruby

> thks, I also found that simply "ps aux | grep ruby" gives the pid's and
a simple kill seems to clear out the processes.

やってみましょう。
https://img.skitch.com/20120301-db8f4e5nauu3kutjtikp1u9q3b.jpg

見覚えのあるファイル名が出てきました。
どうやらこの2行の中に、プロセスIDが書いてあるようです。
https://img.skitch.com/20120301-dq1diffp55mi9h38erindjauh8.jpg
これですね。

もうひとつの方法

また、ポート4567を使う事がわかっているので、次のような書き方もできるらしいです。
lsof -i :4567

You can try "lsof -i :4567" to find which process has the port open,
then stop it with kill.
https://img.skitch.com/20120301-jj1pbc6w49e5q31n93rqty4x9n.jpg
こっちの方がスマートな感じですね。

このようにして、プロセスIDは749だという事が判明しました。
あとは、kill 749 と入力すれば、めでたくVimはオイラのもとへ帰ってきます。
たぶん、あなたのもとへも。

まとめ

Vim+QuickRunが固まったら、

ps aux | grep ruby

または

lsof -i :4567

で、プロセスIDを調べる。

その結果、たとえばPID=333とすると、

kill 333

と入力すれば、制御が返ってくる。