85 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/bin/bash
 | |
| #
 | |
| # Copyright (c) International Business Machines  Corp., 2005
 | |
| # Author: Ram Pai (linuxram@us.ibm.com)
 | |
| #
 | |
| # This library is free software; you can redistribute it and/or
 | |
| # modify it under the terms of the GNU Lesser General Public
 | |
| # License as published by the Free Software Foundation; either
 | |
| # version 2.1 of the License, or (at your option) any later version.
 | |
| #
 | |
| # This library is distributed in the hope that it will be useful,
 | |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
| # Lesser General Public License for more details.
 | |
| #
 | |
| # You should have received a copy of the GNU Lesser General Public
 | |
| # License along with this library; if not, write to the Free Software
 | |
| # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | |
| #
 | |
| 
 | |
| 
 | |
| 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
 | |
| }
 |