理系学生日記

おまえはいつまで学生気分なのか

忍者TOOLS

コマンドの繰り返し実行には watch を使おう

バックグラウンドで動作させているバッチが予想以上に動いているらしい、でもログを出していないようなので、バッチが動いているかどうかはプロセスの生死で確認するしかない、みたいな状況があったりします。
このためには

$ ps -ef | grep Batch

などとしてプロセスがまだ動いてるなーという確認を繰り返し実施する必要があったりしますがダルい。
繰り返し実行させるために、

$ while :
do sleep 1; ps -ef | grep Batch
done

などと打ちこむという方法もありますがダルい。

こういうときには watch コマンドを使えばよろしい。

$ watch -n1 'ps -ef | grep Batch'

watch コマンドとは

watch コマンドは、引数で与えられたコマンドを、繰り返し実行してくれるコマンドになる。デフォルトでは 2 秒間隔、変更したいときには -n オプションで秒単位で指定する。
出力は以下のようなクールな感じになり、この画面は毎回描画し直されるため、「あ、ようやくバッチのプロセスがいなくなった!!!」ということが視覚的に分かりやすくなる。

Every 1.0s: ps -ef | grep Batch                                                                                               Sun Jul 22 02:15:34 2012

  501   757   467   0  2:15AM ttys001    0:00.01 watch -n1 ps -ef | grep Batch
  501   773   757   0  2:15AM ttys001    0:00.00 sh -c ps -ef | grep Batch
  501   775   773   0  2:15AM ttys001    0:00.00 grep Batch

毎回描画されるのであれば、前回描画された画面と今回描画された画面の差分が分かるとなお良い。
もちろんその差分表示も watch はサポートしていて、これが -d オプションになる。これを付けると、差分をハイライトして表示してくれる。

このように、気軽に使えるコマンドですので、貴重な時間をコマンドを繰り返し入力するような非生産的な作業に浪費せず、さぁ今すぐトータル・イクリプス 第 2 話を見て絶望の淵に沈みましょう。よろしくおねがいします。