在 Linux 上,我使用flock lock command
排它锁来执行命令。
在 shell 中执行相同操作的 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
我将结合这两个想法:
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
}