1#!/bin/bash 2 3lockfile="/.nslock" 4SUCCESS=0 5FAIL=1 6otherpid= 7startparent() 8{ 9 rm -f $lockfile 10 echo $$ >| ${lockfile}parent 11 while [ 1 ] 12 do 13 otherpid="$(cat ${lockfile}child 2> /dev/null)" 14 if [ -n "$otherpid" -a -d /proc/$otherpid ] 15 then 16 return 17 fi 18 done 19} 20 21startchild() 22{ 23 rm -f $lockfile 24 echo $$ >| ${lockfile}child 25 while [ 1 ] 26 do 27 otherpid="$(cat ${lockfile}parent 2> /dev/null)" 28 if [ -n "$otherpid" -a -d /proc/$otherpid ] 29 then 30 return 31 fi 32 done 33} 34 35iamgoingahead() 36{ 37 while [ 1 ] 38 do 39 if [ ! -d /proc/$otherpid ] 40 then 41 return $FAIL 42 fi 43 str=`cat $lockfile 2> /dev/null` 44 pid=$(echo $str | awk '{print $1}') 45 error=$(echo $str | awk '{print $2}') 46 if [ "$pid" == "$$" ] 47 then 48 return $error 49 fi 50 sleep 1 51 done 52} 53 54goahead() 55{ 56 set -x 57 ret=$SUCCESS 58 if [ -n "$1" ] 59 then 60 ret=$1 61 fi 62 echo "$otherpid $ret" >| $lockfile 63 set +x 64} 65