4

On Linux I use flock lock command to execute a command with an exclusive lock.

What is the standard operating system command of Solaris 10 to do the same in a shell?

4

There is no flock or similar command for Solaris. If I want to do simple locking I use mkdir as it's a atomic operation and avoids potential race conditions with the usual check file exists/touch combination.

if ! mkdir /tmp/lockdir >/dev/null 2>&1
then
    echo >&2 "Lock exists exiting"
    exit 1
fi
2

After a small Usenet discussion I use the following as a workaround for 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
0

I'd combine the two ideas:

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

}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.