2017年10月4日水曜日

プロセスの終了を監視するbashスクリプト

ふと nohup command & でタスクを投げた後、別のマシンでその終了タイミングを知る方法がない事に気付きました。 マシン1でタスクを投げた後、作業場を変えたりしてマシン2でそのタスクの終了を待つ必要がある時、地味に困る。 今まではマシン2ではpsを連打したりして終了を確認したりしていたのですが、それもアホらしい作業なので、 プロセスを監視するコマンドを作ってみました。

~/binなどにコマンド登録するほどの代物ではないので、~/.bash_profileに以下を登録。
function pcheck() {
  process=`ps -p $1`
  while [ $? -ne 1 ]; do
    sleep 1
    process=`ps -p $1`
  done
  echo "$1 is finished."
}

使い方は以下。12345はプロセスIDに置換してください。 このコマンドを実行すると、プロセスが終了した時にnohupと同様に、ターミナルに通知が表示されます。
nohup bash -lc "pcheck 12345" &
# nohup pcheck 12345 &  # これでは動かない

~/.bashrcと~/.bash_profileのどちらにコマンドを登録しても、nohup pcheck 12345 & とは動かせないので注意。 また~/.bashrcに関数登録しても動きませんでした。~/.bash_profileに書く必要があるみたいです。

0 件のコメント: