shell脚本实现关闭指定程序名的进程

shell脚本实现关闭指定程序名的进程

 

1、  基础篇

在Linux系统下,我们进行程序调试或者是进行应用程序升级时,经常需要先对我们的目标程序进行kill关闭。此时最基础的办法就是先查找到目标进程的PID,然后再执行kill命令去关闭目标进程。

如:我们想要关闭掉svn相关的进程,首先执行ps -aux | grep svn找到当前系统中有svnserve的进程,其PID为15889,

 

接着直接执行kill -9 15889就可以关闭掉此svn的进程了。

 

 

2、  实践篇

从上面可以看出,要实现依据进程名来进行进程的关闭其实只要将上述查找和kill的两步合并起来实现即可。

1)  command命令执行

ps -ef | grep procedure_name | grep -v grep | awk '{print $2}' | xargs kill -9

上面指令中的procedure_name 即为所有关闭的进程名

 

2)  shell脚本运行

下面采用一个通用的shell脚本方式,来实现此功能,执行下述脚本

./close_p.sh  rocedure_name

注意:因脚本执行时,脚本自身的进程名中会带有待关闭的进程名,需在脚本编写时进行相应的处理。

close_p.sh脚本的实现比较简单,内容如下:

 

#!/bin/bash

echo "***************************"
echo "Close the progress by name!"
echo "eg: ./close_p.sh progressName"
echo "***************************"
echo

#echo "PID of this script: $$"
#echo "PPID of this script: $PPID"

function MsgShow()
{
   if [ $# -lt 1 ] ; then
        echo "Parm err ! Exit the shell !";
        exit 1;
   
    else
        case ${1} in
            PARMMISS)
                echo "Missing process name to close!" 
                ;;
            NOPROSS)
                echo "No such process[$2]!"
                ;;
            MULTIPROSS)
                echo "There are too many process contains name[$2]"
                ;;
            *)
                echo "Default case!"
                ;;
        esac
        exit 1;

    fi 

}

function PidFind()
{
    PIDCOUNT=`ps -ef | grep $1 | grep -v "grep" | grep -v $0 | awk '{print $2}' | wc -l`;
    if [ ${PIDCOUNT} -gt 1 ] ; then
        MsgShow MULTIPROSS $1;
    elif [ ${PIDCOUNT} -le 0 ] ; then
        MsgShow NOPROSS $1;
    else
        PID=`ps -ef | grep $1 | grep -v "grep" | grep -v ".sh" | awk '{print $2}'` ;
        echo "Find the PID of this progress!--- process:$1 PID=[${PID}] ";
    fi
    read -p "Are you sure you want to close this progress[y/n]: "
    if [ $REPLY = "y" ] || [ $REPLY = "yes" ] ; then
        echo "Kill the process $1 ...";
        kill -9  ${PID};
        echo "kill -9 ${PID} done!";
    else
        echo "Confirmation of canceling,exit!";
        exit 1
    fi
    #if we use return ,the return val must between 0 and 255
}


if [ $# -lt 1 ] ; then
    MsgShow PARMMISS;
else
    PidFind $1;
fi
 

 

3、  参考篇

有关Shell脚本知识可以参考:《shell脚本学习指南》

有关awk知识可以参考:《sed与awk

 

注:若在拷贝上述.sh文件至linux后,需要注意编码格式的问题。

因为脚本在windows下创建编辑然后上传到linux系统的,所以是dos格式的,而linux却是只能执行格式为unix格式的脚本

在linux中采用vim close_p.sh,执行set ff查看当前文件的格式,若为doc格式的话执行将会出现类似的错误:

[root@localhost work]# ./close_p.sh
-bash: ./close_p.sh: /bin/bash^M: bad interpreter: No such file or directory

此时我们需要执行set ff=unix,然后再次set ff检测文件格式是否已经修改为unix格式,保存文件后并可以正常执行了

你可能感兴趣的:(Shell)