プロセス確認
私もpgrep
,pkill
は知らなかったので大変参考になった。
が、どうも使う気がしない。なぜなら汎用性が低いと感じるからだ。
私の仕事はシステム管理向きで、定期的にプロセス確認をし、死んできたらオペレータの監視コンソールへ通知、というような事をしているが誤報は許されないので非常に慎重さが要求される。同じ実行モジュール名が違うオプションで複数動いている事などよくあり、その中から一意に抽出しなければならない。java
のデーモンプロセスなんかそうだろう。-classpath
,-D...
がつらつらと並び、最後に重要なクラス名が出てくる。そんな時、pgrep
など使い物にならないのだ。
pkill
は怖くて使えない。
$ sleep 30 & [1] 27737 $ sleep 40 & [2] 27738 $ pgrep sleep 27737 27738 $ pkill sleep [1]- Terminated sleep 30 [2]+ Terminated sleep 40
sleep 30
の方のみを殺したい場合、どうするんだろう...。
開発時期にテスト環境で使うなら多少のミスは許されるだろうが、本番実稼動しているマシンにとてもじゃないが使えない。(まぁそもそもコマンドが無いし、kill
自体許される場面は稀だが。
ということで、汎用性が低く、使う場面が限られるんじゃないかなと思う。シェルの操作法を教える際にこれらのコマンドを教える意味がどれ程あるか、ちょっと疑問。私が教える立場ならpgrep
,pkill
は「こんなものもあるよ」程度の紹介に止め、本筋はps
コマンドで教える。シェル初心者が相手ならば尚更だ。ps -ef | grep hoge | grep -v grep
は確かに面倒だが、どのUNIXでも使えるし、パイプの練習にもなるからだ。
あと、ps aux
ってBSD系のUNIX? 商用のUNIXで使えるのかな...。ps -ef
の方が一般的だと思っていたんだが。
余談だけど、ps -eo "pid,args"
とかすれば、好みの識別子だけ表示できる。詳しくはManpage of PSで(Linuxの場合)。