summaryrefslogtreecommitdiffstats
path: root/src/mstop.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/mstop.sh')
-rwxr-xr-xsrc/mstop.sh59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/mstop.sh b/src/mstop.sh
new file mode 100755
index 000000000..702d17659
--- /dev/null
+++ b/src/mstop.sh
@@ -0,0 +1,59 @@
+#!/usr/bin/env bash
+
+set -e
+
+script_root=`dirname $0`
+
+[ -z "$BUILD_DIR" ] && BUILD_DIR=build
+
+if [ -e CMakeCache.txt ]; then
+ script_root=$PWD
+elif [ -e $script_root/../${BUILD_DIR}/CMakeCache.txt ]; then
+ script_root=`(cd $script_root/../${BUILD_DIR}; pwd)`
+fi
+
+[ "$#" -lt 1 ] && echo "usage: $0 <name> [entity [id]]" && exit 1
+
+name=$1
+entity=$2
+id=$3
+
+run_root=$script_root/run/$name
+pidpath=$run_root/out
+
+if [ "$entity" == "" ]; then
+ pfiles=`ls $pidpath/*.pid` || true
+elif [ "$id" == "" ]; then
+ pfiles=`ls $pidpath/$entity.*.pid` || true
+else
+ pfiles=`ls $pidpath/$entity.$id.pid` || true
+fi
+
+MAX_RETRIES=20
+
+for pidfile in $pfiles; do
+ pid=`cat $pidfile`
+ fname=`echo $pidfile | sed 's/.*\///g'`
+ [ "$pid" == "" ] && exit
+ [ $pid -eq 0 ] && exit
+ echo pid=$pid
+ extra_check=""
+ entity=`echo $fname | sed 's/\..*//g'`
+ name=`echo $fname | sed 's/\.pid$//g'`
+ [ "$entity" == "radosgw" ] && extra_check="-e lt-radosgw"
+ echo entity=$entity pid=$pid name=$name
+ counter=0
+ signal=""
+ while ps -p $pid -o args= | grep -q -e $entity $extracheck ; do
+ if [[ "$counter" -gt MAX_RETRIES ]]; then
+ signal="-9"
+ fi
+ cmd="kill $signal $pid"
+ printf "$cmd...\n"
+ $cmd
+ sleep 1
+ counter=$((counter+1))
+ continue
+ done
+done
+