65 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
#!/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
 | 
						|
}
 |