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
 | |
| }
 |