風柳メモ

ソフトウェア・プログラミング関連の覚書が中心

シェルスクリプトの多重起動を防ぐには?

スクリプト名をキーにプロセス数をカウントして場合わけすればよいと思ったのだけれども…

サンプル:single_process.sh
#! /bin/bash
COUNT=`ps -ef | grep $0 | grep -v grep | wc -l`
echo "process count: $COUNT"
if [ $COUNT -gt 1 ]; then
        echo "process already exists"
        exit
fi
echo "in progress ..."
sleep 10
echo "down."

サンプルの実行結果

$ ./single_process.sh
process count: 2
process already exists

となってしまう。
つまり、ひとつしかスクリプトを実行していないにも関わらず、2個とカウントされてしまうのである……いったい、なぜ?


【追記】って、あ、そうか…

COUNT=`ps -ef | grep $0 | grep -v grep | wc -l`

ここで(``を使って)子プロセス作成しているから、そりゃひとつ増えるわな(恥)。