summaryrefslogtreecommitdiff
path: root/tests/virtualfb.sh
diff options
context:
space:
mode:
authordon bright <hugh.m.bright@gmail.com>2013-02-16 14:38:11 (GMT)
committerdon bright <hugh.m.bright@gmail.com>2013-02-16 14:38:11 (GMT)
commit79c4b61f2283b699978ee74df79eddd1ca289acf (patch)
treebe91dd3b7d0d2bd054038b6022dcd03eb18d3e56 /tests/virtualfb.sh
parent1778047f77ea9513b28ee99b0cc64a24da42319f (diff)
deal with some unusual systems where $! doesn't work as expected
Diffstat (limited to 'tests/virtualfb.sh')
-rwxr-xr-xtests/virtualfb.sh33
1 files changed, 32 insertions, 1 deletions
diff --git a/tests/virtualfb.sh b/tests/virtualfb.sh
index 5abd804..06d37bf 100755
--- a/tests/virtualfb.sh
+++ b/tests/virtualfb.sh
@@ -3,6 +3,8 @@
# Toggle the Virtual Framebuffer
# If started, stop. If stopped, start.
+debug=
+
start()
{
if [ "`command -v Xvfb`" ]; then
@@ -20,7 +22,20 @@ start()
VFB_DISPLAY=`echo | awk 'BEGIN{srand();} {printf ":%.0f", rand()*1000+100};'`
$VFB_BINARY $VFB_DISPLAY -screen 0 800x600x24 &> ./virtualfb.log &
- VFB_PID=$!
+ # on some systems $! gives us VFB_BINARY's PID, on others we have to subtract 1
+ VFB_PID_MINUS0=$!
+ VFB_PID_MINUS1=$(($VFB_PID_MINUS0 - 1))
+
+ if [ "`ps cax | grep $VFB_PID_MINUS0 | grep $VFB_BINARY`" ]; then
+ VFB_PID=$VFB_PID_MINUS0
+ elif [ "`ps cax | grep $VFB_PID_MINUS1 | grep $VFB_BINARY`" ]; then
+ VFB_PID=$VFB_PID_MINUS1
+ else
+ echo started $VFB_BINARY but cannot find process ID in process table
+ echo please stop $VFB_BINARY manually
+ VFB_PID=
+ return
+ fi
echo $VFB_DISPLAY > ./virtualfb.DISPLAY
echo $VFB_PID > ./virtualfb.PID
@@ -48,13 +63,29 @@ isrunning()
{
isrunning_result=
if [ -e ./virtualfb.PID ]; then
+ if [ $debug ]; then echo "found PID file"; fi
VFB_PID=`cat ./virtualfb.PID`
+ if [ ! $VFB_PID ]; then
+ echo ./virtualfb.PID contained invalid PID number
+ return
+ fi
+ if [ $debug ]; then echo "PID from file:" $VFB_PID; fi
+ PS_RESULT=`ps cax | awk ' { print $1 } '`
+ GREP_RESULT=`echo $PS_RESULT | grep $VFB_PID`
+ if [ $debug ]; then echo "grep ps result: " $GREP_RESULT; fi
if [ "`ps cax | awk ' { print $1 } ' | grep ^$VFB_PID\$`" ]; then
+ if [ $debug ]; then echo "found pid in process table."; fi
isrunning_result=1
+ else
+ if [ $debug ]; then echo "did not find pid in process table."; fi
fi
fi
}
+if [ "`echo $* | grep debug`" ]; then
+ debug=1
+fi
+
isrunning
if [ $isrunning_result ]; then
stop
contact: Jan Huwald // Impressum