免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8269 | 回复: 7
打印 上一主题 下一主题

绝对好用的UNIX/LINUX下杀进程的脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-26 20:15 |只看该作者 |倒序浏览
本人写的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

kill.sh.gz

703 Bytes, 下载次数: 270

评分

参与人数 1可用积分 +10 收起 理由
寂寞烈火 + 10 精品文章

查看全部评分

论坛徽章:
0
2 [报告]
发表于 2009-06-26 20:30 |只看该作者
补充:
如果杀的进程名有同名的,那么同名进程也将被杀掉
另外本脚本只杀当前用户下的进程,有需要的可以改进一下,加一个 [-u uid]选项

论坛徽章:
0
3 [报告]
发表于 2009-06-27 02:31 |只看该作者
收藏

论坛徽章:
0
4 [报告]
发表于 2009-06-27 15:39 |只看该作者
kill还不多么? 什么skill pkill等。你的有何特长?

我一般用htop软件地干活。

论坛徽章:
0
5 [报告]
发表于 2009-06-27 15:47 |只看该作者
通用啊,skill pkill一般只有linux上能用,AIX,HP上默认不带的

论坛徽章:
0
6 [报告]
发表于 2009-06-28 13:37 |只看该作者
下载下来分析分析,多谢楼主!

论坛徽章:
0
7 [报告]
发表于 2009-07-04 19:09 |只看该作者

回复 #1 enigma1983 的帖子

好东西,怎么没人顶啊

论坛徽章:
0
8 [报告]
发表于 2009-07-04 23:56 |只看该作者
个人建议你采用ps -o 来定制命令输出
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP