Home | History | Annotate | Download | only in strace_test
      1 #!/bin/sh
      2 #
      3 # slay 2.0 - kill all processes belonging to the specified user(s).
      4 # originally by Chris Ausbrooks <fish (at] bucket.ualr.edu>
      5 # based on kall (a script of unknown origin)
      6 # Heavily rewritten by Pawel Wiecek <coven (at] debian.org> for Debian
      7 # This is a free software distributed according to terms of GNU GPL
      8 # (see /usr/share/common-licenses/GPL)
      9 
     10 # Revision history:
     11 # 0.99	First attempt.
     12 # 1.0	Added Butthead.
     13 # 1.1	Added retribution.
     14 # 1.2	Added slayee notification.
     15 # 2.0   Completely rewritten
     16 # 2.1	Fix an *ugly* bug that caused slayer to be slain...
     17 
     18 USER=`whoami`
     19 SIGNAL=`echo $1 | grep '^\-.*'`
     20 ME=`basename $0`
     21 COOL='0'
     22 
     23 # this piece of nested ifs is added for Debian package only
     24 if [ -f /etc/slay_mode ]
     25 then
     26   if grep -q mean /etc/slay_mode
     27   then
     28     MODE='mean'
     29   fi
     30   if grep -q nice /etc/slay_mode
     31   then
     32     MODE='nice'
     33   fi
     34   if [ -z $SLAY_BUTTHEAD ]
     35   then
     36     if grep -q butthead /etc/slay_mode
     37     then
     38       SLAY_BUTTHEAD='on'
     39     fi
     40     if grep -q normal /etc/slay_mode
     41     then
     42       SLAY_BUTTHEAD='off'
     43     fi
     44   fi
     45 else
     46   MODE='mean'
     47   if [ -z $SLAY_BUTTHEAD ]
     48   then
     49     SLAY_BUTTHEAD='off'
     50   fi
     51 fi
     52 
     53 # Command line handling.
     54 if [ "$SIGNAL" != "" ]
     55 then
     56   shift
     57 else
     58   SIGNAL="-KILL"
     59 fi
     60 
     61 if [ "$SIGNAL" != "-clean" ]
     62 then
     63   SIGSHOW="$SIGNAL"
     64 else
     65   SIGSHOW="-TERM + -KILL"
     66 fi
     67 
     68 # Help for loosers.
     69 if [ "$1" = "" -o "$1" = "--help" ]
     70 then
     71   echo "usage: $ME [-signal] name [name...]"
     72   if [ "$SLAY_BUTTHEAD" = "on" ]
     73   then
     74     echo "       Like, kills people and stuff."
     75     echo "       With -clean kicks ass forst and then does real pain."
     76   else
     77     echo "       Kills all processes belonging to any of the given names."
     78     echo "       Use -clean as a signal name to kill with TERM first and then with KILL."
     79   fi
     80   exit -1
     81 fi
     82 
     83 # Misuse trap.
     84 if [ "$USER" != "$1" ]
     85 then
     86   if [ "$USER" != "root" ]
     87   then
     88     if [ "$MODE" = "mean" ]
     89     then
     90       $0 -KILL $USER
     91     else
     92       if [ "$SLAY_BUTTHEAD" = "on" ]
     93       then
     94         echo "${ME}: Cut it out."
     95       else
     96         echo "${ME}: Only root gets to do that."
     97       fi
     98     fi
     99     exit 2
    100   fi
    101 fi
    102 
    103 # Main body.
    104 while [ "$1" != "" ]
    105 do
    106   if [ "$1" = "$USER" ]
    107   then
    108     if [ "$SLAY_BUTTHEAD" = "on" ]
    109     then
    110       echo "${ME}: Beavis, don't make me have to smack you."
    111     else
    112       echo "${ME}: Illegal operation."
    113     fi
    114   fi
    115   COOL="1"
    116   if [ "$SLAY_BUTTHEAD" = "on" ]
    117   then
    118     echo "${ME}: $SIGSHOW is kicking $1's butt!"
    119     echo -e "\\n\\n\\nI'm kicking your butt.\\n\\n\\n" | write $1 2>/dev/null
    120   else
    121     echo "${ME}: Sending $SIGSHOW signal to $1's process(es)..."
    122     echo -e "\\n\\n\\nYour current session has been terminated.\\n\\n\\n" | \
    123     	write $1 2>/dev/null
    124   fi
    125   if [ "$SIGNAL" = "-clean" ]
    126   then
    127     su -m $1 -c "kill -TERM -1 2>/dev/null"
    128     sleep 10
    129     su -m $1 -c "kill -KILL -1 2>/dev/null"
    130   else
    131     su -m $1 -c "kill $SIGNAL -1 2>/dev/null"
    132   fi
    133   shift
    134 done
    135 
    136 # Error message.
    137 if [ $COOL = "0" ]
    138 then
    139   if [ "$SLAY_BUTTHEAD" = "on" ]
    140   then
    141     echo "${ME}: How old are you, Beavis?"
    142   else
    143     echo "${ME}: Nothing done."
    144   fi
    145   exit 1
    146 fi
    147 
    148 # Non-error message.
    149 if [ $COOL = "1" ]
    150 then
    151   if [ "$SLAY_BUTTHEAD" = "on" ]
    152   then
    153     echo "${ME}: Whoa, I have the power supreme."
    154   else
    155     echo "${ME}: Done."
    156   fi
    157   exit 0
    158 fi
    159