一个UNIX平台上kill进程的Shell程序,killprog

 

源程序来自 http://www.unixreview.com/documents/urm0108e/

原来程序中过滤掉自身进程的那个语句有bug,如果把killprog放到一个$PATH变量的路径中,然后从其他路径启动killprog时,$0是带有路径的,后来我把$0改为${0##*/},就可以过滤掉了

后来我还给这个作者写了个email,想探讨一下,别人也没有理我,难道是他的英语水平太差,呵呵

 

Korn Shell 下运行,源程序如下:

#!/bin/ksh
# killprog: kill a program by name instead of by process id.
# If there is more than one copy, display a list, and
# ask to pick the right one.
# Author: Fred Brunet
# Modify: Gehongbin   2001.8.30     $0  => ${0##*/}

Kill=/tmp/killprogout.$$
if [ $# -eq 0 ]
then
   printf "Usage: killprog name/n"
   exit 1
fi

# eliminate present program and 'grep $1' from process
ps -ef | grep -v "grep $1"|grep -v ${0##*/}| grep $1 > $Kill
Count=`wc -l $Kill | awk '{ print $1 }'`
if [ $Count -ge 1 ]
then
   awk ' { printf "%2d : %s/n", NR, $0 }' < $Kill
else
   printf "No matches to kill/n"
   if [ -f $Kill ]
   then
      rm $Kill
   fi
   exit 1
fi
printf "Which of the above do you mean:  enter number or '0' to quit: "

while true
do
   read lineno
   # non-numeric data returns 0
   lcnt=`echo $lineno|awk ' { if ($0 ~ /[^0-9]/ )
                           print 0
                        else
                           print 1 } '`
   if [ $lcnt -eq 0 ]
   then
      printf "Valid input: 1-$Count or '0' to quit.  Reenter number: "
      continue
   fi

   # default  to 0 and quit
   lineno=${lineno:=0}
   if [ $lineno -eq 0 ]
   then
      if [ -f $Kill ]
      then
         rm $Kill
      fi
      exit 1
   fi

   if [ $lineno -gt $Count -o $lineno -lt 0 ]
   then
      printf "Valid input: 1-$Count or '0' to quit.  Reenter number: "
   else
      break
   fi
done

Flist=`sed -n "${lineno}p" $Kill`
echo $Flist | awk '{ printf "%s/n", $0 }'
Killproc=`echo $Flist | awk '{ print $2 }'`
printf "Kill ($Killproc) ? y/n "
read answer
case $answer in
   y|Y) kill $Killproc
        printf "$Killproc terminated!/n";;
   *)
        printf "Nothing killed/n";;
esac
if [ -f $Kill ]
then
   rm $Kill
fi
# end killprog

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值