open up traffic to qemu nodes + miscell
[tests.git] / system / template-qemu / qemu-kill-node
1 #!/bin/sh
2 # $Id$
3 COMMAND=$(basename $0)
4 cd $(dirname $0)
5 cd ..
6
7 # somehow qemu-system-x86_64 show up in pgrep as qemu-system-x86
8 COMMANDS_TO_KILL="qemu qemu-system-x86_64 qemu-system-x86"
9
10 function usage () {
11     echo "Usage: $COMMAND -l"
12     echo "  lists current qemu processes"
13     echo "usage: $COMMAND hostname"
14     echo "  kill qemu instance for that node"
15     echo "usage: $COMMAND"
16     echo "  kill all instances of [$COMMANDS_TO_KILL]"
17     exit 1
18 }
19
20 function list_pids () {
21     hostnames="$@"
22     if [[ -n "$hostnames" ]] ; then
23         for hostname in $hostnames; do
24             nodedir=qemu-$hostname
25             cat $nodedir/qemu.pid 2> /dev/null
26         done
27     else
28         for command in $COMMANDS_TO_KILL; do
29             pgrep -x $command
30         done
31     fi
32 }
33
34 function kill_from_file () {
35     file=$1; shift
36     if [ -f $file ] ; then
37         pid=$(cat $file)
38         echo Killing $pid
39         kill $pid
40         mv $file $file.killed
41     else
42         echo "Could not find file $file - that qemu was killed already"
43     fi
44 }    
45
46 function kill_pids () {
47     hostnames="$@"
48     if [[ -n "$hostnames" ]] ; then
49         for hostname in $hostnames; do
50             nodedir=qemu-$hostname
51             kill_from_file $nodedir/qemu.pid
52         done
53     else
54         pids=$(list_pids)
55         if [ -n "$pids" ] ; then
56             echo "Killing all processes matching $COMMANDS_TO_KILL"
57             for pid in $pids; do
58                 echo Killing $pid
59                 kill $pid
60             done
61         else
62             echo "No process found that match $COMMANDS_TO_KILL"
63         fi
64     fi
65 }
66
67 function show_pids () {
68     pids=$(list_pids "$@")
69     if [ -n "$pids" ] ; then
70         ps $pids | grep -v $COMMAND || echo Nothing to show
71     else
72         echo Nothing to show
73     fi
74 }
75
76 function main () { 
77     while getopts "lk" opt; do
78         case $opt in
79             l) OPT_LIST=true ;;
80             k) OPT_GREP=true ;;
81             *) usage ;;
82         esac
83     done
84     shift $(($OPTIND -1))
85
86     # listing
87     if [ -n "$OPT_LIST" ] ; then
88         show_pids "$@"
89         exit 0
90     fi
91
92     kill_pids "$@"
93 }
94
95 main "$@"