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
저는 이 두 가지 아이디어를 결합하겠습니다.
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
}