shell脚本,结束指定脚本

shell脚本,结束指定脚本

平时写shell一不小心来个死循环,或是超长等待,需要先进程,再kill,懒人写个脚本。

第一种,适用于脚本(当然如果知道服务名也可以),通过ps列出进程号(过滤的pid是1列3行),循环结束所有进程号

#!/bin/bash
r#!/bin/bash
read -p "输入要结束的脚本或服务名称:" NAME
WC=$(ps -ef | grep $NAME |grep -v grep | wc -l)
#判断进程是否存在
if [ $WC -eq 0 ];then
echo "$NAME 不存在"
else
        PID=$(ps -ef | grep $NAME |grep -v grep  )
        echo "========================== $NAME 相关进程信息========================="
        echo "$PID"
        echo "====================================================================="
        #确认是否结束进程
        echo -e "\033[32m y 结束$NAME相关进程 \033[0m"
        echo -e "\033[32m n或按任意键退出\033[0m"
        
        read -p "请输入(默认n):" NN
        case $NN in
            yes|YES|y|Y)


        i=1
        while [ $i -le $WC ]
        do
        kill -9 $( ps -ef |grep $NAME |grep -v grep| awk '{print $2}'|head -n$i|tail -n1 ) > /dev/null 2>&1
        let i++
        done
        echo -e "\033[31m $NAME 相关进程结束 \033[0m"
        ;;

        *)
        exit
        ;;
        esac

fi

第二种,适用于服务,通过pidof列出服务所有的进程号(过滤的pid是1行3列),循环结束所有进程号。

#!/bin/bash
read -p "输入要结束的服务名称:" NAME
WC=$(pidof  $NAME | wc -w)
#判断进程是否存在
if [ $WC -eq 0 ];then
echo "$NAME 不存在"
else
        PID=$(pidof $NAME)
        echo "进程号:"
        echo "$PID"
        i=1
        while [ $i -le $WC ]
        do
        kill -9 $( pidof $NAME|awk '{print $i}' ) > /dev/null 2>&1
        let i++
        done
        echo "$NAME 相关进程结束"
fi

kill -9 可能会打印错误信息,需要null(譬如先结束了保护进程)

good good study, day day up!

发表评论

textsms
account_circle
email

shell脚本,结束指定脚本
平时写shell一不小心来个死循环,或是超长等待,需要先进程,再kill,懒人写个脚本。 第一种,适用于脚本(当然如果知道服务名也可以),通过ps列出进程号(过滤的pid是1列3行…
扫描二维码继续阅读
2021-10-29