Hatena::ブログ(Diary)

tanamonの日記

2008-10-10

[][]LinuxプロセスIDgrepして引数に渡す方法

某社の案件アプリが挙動不審なため、Javaスレッドダンプを定期的に取ろうという話になった。

JRockitでは以下のようなコマンドを実行すると標準出力にダンプしてくれるのだけど、

$ jrcmd <pid> prints_thread

引数プロセスIDをスマートに取得する方法がぱっと思いつかなかった。

で、どうしようかなと思っていたら、某人がawkを使ってさくさく作ってくれた。

$ ps -ef | grep hogehoge | awk '{print $2}'

awkってこういう時に使うんだ、とちょっと関心した。


その時は上記を元にcronに書いておしまいになったけど、実はこれだとgrepを実行したプロセスが入ってしまうので、不完全っぽい。ちゃんと書くと、以下のようになる。

$ ps -ef | grep hogehoge | grep -v 'grep' | awk '{print $2}'

しかし、これは何とも気持ち悪い。

調べてみたところ、1文字目を[]で囲うことで回避できるらしい。

$ ps -ef | grep [h]ogehoge | awk '{print $2}'

これで少しマシになったけど、まだ気持ち悪い。

と思ってたら、pgrepというgrepしてpidを返すというズバリなコマンドがあった。

$ pgrep -f hogehoge

これならすっきりしていてステキ

先のjrcmdに組み込んでも気持ち悪くない。

$ jrcmd `pgrep -f hogehoge` prints_thread > /var/log/hogehoge

ちなみにpkillというコマンドもあるらしい。

いつも、

$ ps -ef | grep hogehoge
$ kill -9 <マウスでプロセスIDを選んでコピペ>

とかやってたけど、1行で書けたのね。


参考

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/tanamon/20081010/1223621055
リンク元