# non-commercial use provided that this notice appears in
# all copies of the file.  There is no warranty, either
# expressed or implied, supplied with this code.
#
# NAME
#    Kill - kill a process (send a signal) by name
#
# SYNOPSIS
#    Kill [-signal] ProcessName
#
# DESCRIPTION
#    This command will send a signal to any process with the
#    name ProcessName.  The user will be asked for
#    conformation before sending the signal to the process.
#
#    -signal
#         Specifies the signal to send to the process.  Any
#         value that is accepted by the kill(1) command may
#         be specified.  For example, either -9 or -KILL can
#         be used to send signal nine to the process.  If
#         this option is not used, signal 15 (TERM) will be
#         sent to the process.
#
# RETURN VALUE
#    0    Successful completion
#    1    Usage error or abnormal termination
#
############################################################
PATH=$PATH:`dirname $0`

. SystemType.sh
. GetYesNo.sh

CMDNAME=`basename $0`
USAGE="Usage: $CMDNAME [-signal] ProcessName"
OLD_IFS=$IFS             # Original value of IFS variable
SIGNAL=                  # Optional signal; see kill(1)
NAME=                    # Name of process to kill
PID=                     # PID of process being checked
PROCNAME=                # Name of process being checked
OWNER=                   # Owner of process being checked
PS_OPTS=                 # Options for ps command
PROCESS_LIST=/tmp/list.$$ # Output of ps command
TITLE_PRINTED=FALSE      # Title printed? (TRUE or FALSE)
FOUND=FALSE              # Found matching process?
LINE=                    # Single line of output from ps
COL=                     # Column where process name begins
SYSTEM=`SystemType`      # String identifying the system

trap 'rm -f /tmp/*.$$; exit 1' 1 2 3 15

#
NAME=$1        # Get the name of the process to kill.

#
# Determine which options to use with the ps command.
#
case $SYSTEM in
     SUNBSD | ULTRIX ) PS_OPTS="-auxw"     ;;
     * )               PS_OPTS="-ef"       ;;
esac

#
# Get a list of the current processes and filter out the
# lines that do not contain the process we are looking for.
#
ps $PS_OPTS                   |
     sed '1d'                 |    # Remove the title line
     grep "$NAME"             |    # Eliminate the chaff
     grep -v "$0"             |    # Eliminate this process
     grep -v "ps $PS_OPTS"    >$PROCESS_LIST

#
# Check each process.
#
exec <$PROCESS_LIST
IFS=
while read LINE
do
     IFS=$OLD_IFS
     #
     # Get the owner, PID, and name of the process.
     #
     set $LINE
     OWNER=$1
     PID=$2

     #
     # Determine the column where the process name begins.
     #
     case $SYSTEM in
          AIX | HP | SGI | SOLARIS )    COL=48 ;;
          SUNBSD | DECOSF )             COL=57 ;;
          ULTRIX )                      COL=51 ;;
          * )  echo "Unexpected system type." 1>&2
               exit 1
               ;;
     esac

     LINE=`echo "$LINE" | cut -c$COL-`
     set dummy $LINE
     shift
     PROCNAME=$1

          # Ask user.
          #
          if GetYesNo \
               "$PID    $OWNER  $PROCNAME (y/n)? " </dev/tty
          then
               kill $SIGNAL $PID
          fi
     fi
     IFS=
done

if [ "$FOUND" = "FALSE" ]; then
     echo "Process \"$NAME\" not found."
fi

rm -f /tmp/*.$$
exit 0

This file was created with man2html