| #!/bin/bash |
| |
| lockfile="/.nslock" |
| SUCCESS=0 |
| FAIL=1 |
| otherpid= |
| startparent() |
| { |
| rm -f $lockfile |
| echo $$ >| ${lockfile}parent |
| while [ 1 ] |
| do |
| otherpid="$(cat ${lockfile}child 2> /dev/null)" |
| if [ -n "$otherpid" -a -d /proc/$otherpid ] |
| then |
| return |
| fi |
| done |
| } |
| |
| startchild() |
| { |
| rm -f $lockfile |
| echo $$ >| ${lockfile}child |
| while [ 1 ] |
| do |
| otherpid="$(cat ${lockfile}parent 2> /dev/null)" |
| if [ -n "$otherpid" -a -d /proc/$otherpid ] |
| then |
| return |
| fi |
| done |
| } |
| |
| iamgoingahead() |
| { |
| while [ 1 ] |
| do |
| if [ ! -d /proc/$otherpid ] |
| then |
| return $FAIL |
| fi |
| str=`cat $lockfile 2> /dev/null` |
| pid=$(echo $str | awk '{print $1}') |
| error=$(echo $str | awk '{print $2}') |
| if [ "$pid" == "$$" ] |
| then |
| return $error |
| fi |
| sleep 1 |
| done |
| } |
| |
| goahead() |
| { |
| set -x |
| ret=$SUCCESS |
| if [ -n "$1" ] |
| then |
| ret=$1 |
| fi |
| echo "$otherpid $ret" >| $lockfile |
| set +x |
| } |