#!/bin/csh

# csh script to emulate killall
# by peter bartoli 8/19/98

# check number of arguments
if ($#argv < 1) then
  echo "usage: killall [-signal] keyword"
  exit 1
 endif
if ($#argv > 2) then
  echo "usage: killall [-signal] keyword"
  exit 1
 endif

# protect our results
umask 077

# initialize binary locations; avoid using paths
set ps='/usr/bin/ps'
set grep='/usr/bin/egrep'
set awk='/usr/bin/awk'
set kill='/usr/bin/kill'
set rm='/usr/bin/rm'
set sort='/usr/bin/sort'
set uniq='/usr/bin/uniq'
set sed='/usr/bin/sed'

# process with one command line argument
if ($#argv == 1) then
  set key = "${1}"
  set signal = "-TERM"
 endif

# process with two command line arguments
if ($#argv == 2) then
  set key = "${2}"
  set signal = "${1}"
 endif

# find matching processes
$ps -auxww | $grep "/$key\ |\ $key\ " | $awk '{ print $2 }' > /var/tmp/kill.$$
$ps -auxww | $grep "/$key\ |\ $key\ " | $awk '{ print $2 }' >> /var/tmp/kill.$$
$ps -auxww | $awk '{ print $2, $11, $12 }' | $grep $key | $awk '{ print $1 }' \
  >> /var/tmp/kill.$$
$ps -auxww | $awk '{ print $2, $11, $12 }' | $grep $key | $awk '{ print $1 }' \
  >> /var/tmp/kill.$$
set list = ` $sed /$$/d /var/tmp/kill.$$ | $sort | $uniq -d `

# if none, report result
if ($#list == 0) then
  echo "no processes matching $key"
  exit 1 
 endif

# send signal and remove temp file
$kill $signal $list
$rm -f /var/tmp/kill.$$
exit 0

# end of script

