読者です 読者をやめる 読者になる 読者になる

風柳メモ

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

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

bash

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

サンプル: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`

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