ひさびさに目から鱗(うろこ)が落ちました。たまたま見つけた次のサイト。
よくサーバーが起動しているかどうか確認するときにpsコマンドで見るじゃないですか。たとえばapacheのプロセスが起動しているかを見るときは
$ ps alx | grep apache
5 33 11347 11020 15 0 158848 2056 341702 S ? 0:00 /usr/sbin/apache2 -k start
5 33 11352 11020 16 0 183436 2132 341162 S ? 0:00 /usr/sbin/apache2 -k start
0 1000 12296 17847 18 0 4956 792 – R+ pts/4 0:00 grep apache
などとするのですが、こうすると運が悪いとgrepのプロセスもリストに入ってきます。で、上記のサイトで知ったTipsは”grep apache”ではなく”grep [a]pache”とすること。実際にはシェルが展開するのを防ぐため「”」でクォートする必要があります。
一瞬、「そんなことしてもapacheも[a]pacheも正規表現的には同じなのでどっちみちgrepプロセスは引っかかってくるよ。」と思いましたが、やってみると確かにgrepプロセスが引っ掛からなくなっている。で、しばらくして「あっ」と気付きました。
そうです。”grep [a]pache”とやるとpsコマンドの結果にも”grep [a]pache”と表示されるので”grep apache”にも”grep [a]pache”にもマッチしません。
ちなみにいつもは”ps alx | grep apache | grep -v grep”などとやってましたがタイプが面倒なので脳内で消していました。横着者の私としてはこれで「”」がなければ完璧なTIPSなのですが…。
ps の -C オプションでコマンド名を指定するんじゃダメなのかな?
う、-C知りませんでした。確かにコマンド名で引けますね。javaプロセスなどを探すにはこれがベストですね!
ただ、完全なコマンド名が必要(apacheではなくapache2やrubyではなくruby1.8)なことと、-fオプションでの結果をひっかけるにはやはりgrepは必要かとは思います。