二重起動の防止
同僚から、シェルで二重起動防止を実現するにはということを相談される。
パッと思いつくのはlockファイルを使ったパターン。
が、今回はpsの結果から取るようにしたいと言う。
で、実際に書いてみた。
test.sh
PIDS=`ps -C "sh test.sh" -o pid=` for PID in $PIDS do if [ $PID != '' ]; then if [ $PID != $$ ]; then echo "shell already started" exit fi fi done sleep 30
ポイント
- psコマンドの-oオプションで出力するデータを選べる
- 自分のプロセスIDは$$で取得できる
- psの結果は複数になるかもしれない