Linuxでは、flock lock command
排他的ロックを使用してコマンドを実行します。
シェルで同じ操作を実行するSolaris 10標準オペレーティングシステムコマンドは何ですか?
答え1
flock
Solaris には同様のコマンドはありません。簡単なロックを実行したい場合はmkdir
アトミックタスクなので、これを使用してファイルの存在/タッチの組み合わせの一般的な確認を行うことで潜在的な競合状態を回避します。
if ! mkdir /tmp/lockdir >/dev/null 2>&1
then
echo >&2 "Lock exists exiting"
exit 1
fi
答え2
しばらくしてニュースグループディスカッション回避策として以下を使用しましたflock -n lockfile -c command
。
#! /bin/bash
if [ $# != 4 -o "$1" = '-h' ] ; then
echo "Usage: flock -n lockfile -c command" >&2
exit 1
fi
lockfile=$2
command=$4
set -o noclobber
if 2>/dev/null : > "$lockfile" ; then
trap 'rm -f "$lockfile"' EXIT
$BASH -c "$command"
else
exit 1
fi
答え3
私はこれら2つのアイデアを組み合わせます。
getLock() {
PROG=$( basename $0 )
SHAREDLOCK="/tmp/lockdir-$PROG"
if mkdir "$SHAREDLOCK" >/dev/null 2>&1
then
trap 'rmdir "$SHAREDLOCK"' EXIT
chmod 0 "$SHAREDLOCK" # discourage anyone from messing with it else the rmdir might fail
else
echo >&2 "Lock ($SHAREDLOCK) exists. exiting"
exit 1
fi
}