如何在 Solaris 10 上锁定?

如何在 Solaris 10 上锁定?

在 Linux 上,我使用flock lock command排它锁来执行命令。

在 shell 中执行相同操作的 Solaris 10 标准操作系统命令是什么?

答案1

flockSolaris没有或类似的命令。如果我想做简单的锁定,我会使用它,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

}

相关内容