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