- 论坛徽章:
- 0
|
本人写的UNIX下杀进程的脚本,用了一年了,屡试不爽,分享给大家,已在AIX,HP-UX,Solaris,FreeBSD,Linux测试,附件即是这个脚本。
用法很简单:
usage: kill.sh [-n] [-s signal] pname ...
-n 类似cvs的-n,即虚拟执行,不执行最终的kill操作
-s signal,即发送指定信号,默认为TERM,此参数将直接传给kill命令作处理,可以为KILL,INT,HUP,QUIT,详细的可man signal得到
pname即进程名字,可以一次即定多个名字,一起杀掉
如果要杀的进程确实存在,本脚本会有如下显示
echo "kill -s $SIGNAL $pid($pname)"即显示要杀的进程的进程号及进程名(如果提定多个进程名时,显示进程名便于查看)
顺便推广一下本人开源项目,本脚本即为其中的一个小工具,链接已发布在C版,有兴趣可以过来看看
http://bbs3.chinaunix.net/thread-1489988-1-1.html
#!/bin/sh
#
# kill.sh: like kill but use process name as the parameter
# usage: kill.sh [-n] [-s signal] pname ...
# version: 1.0
# OS: AIX,HP-UX,Solaris,FreeBSD,Linux
# author: luojian(enigma1983@163.com)
# history:
# 2008-10-24 1.0 released
# 2008-11-04 option [-v] changed to [-n]
# 2009-06-18 display process name
#
VIRTUAL="no"
SIGNAL="TERM"
while getopts :ns: arg
do
case $arg in
n)
VIRTUAL="yes"
;;
s)
SIGNAL="$OPTARG"
;;

printf "kill.sh: option requires an argument -- %s\n" "$OPTARG"
printf "usage: kill.sh [-n] [-s signal] pname\n"
exit 1
;;
?)
printf "kill.sh: illegal option -- %s\n" "$OPTARG"
printf "usage: kill.sh [-n] [-s signal] pname\n"
exit 1
;;
esac
done
shift `expr $OPTIND - 1`
if [ $# -eq 0 ]
then
printf "usage: kill.sh [-n] [-s signal] pname\n"
exit 1
fi
OS=`uname -s`
while [ "$1" != "" ]
do
case $OS in
AIX|FreeBSD)
list=`ps -U $LOGNAME -o pid,comm|sed -n '2,$p'|grep $1|awk '{print $1"|"$2}'`
;;
HP-UX|SunOS|Linux)
list=`ps -u $LOGNAME|sed -n '2,$p'|grep $1|awk '{print $1"|"$4}'`
;;
esac
for element in $list
do
pid=`echo $element|cut -d"|" -f1`
pname=`echo $element|cut -d"|" -f2`
if [ "$pname" = "$1" ]
then
echo "kill -s $SIGNAL $pid($pname)"
if [ $VIRTUAL = "no" ]
then
kill -s $SIGNAL $pid
fi
fi
done
shift
done |
评分
-
查看全部评分
|