shell kill 进程树

来源:互联网 发布:mac代理设置 编辑:程序博客网 时间:2024/05/29 23:48

Shell 脚本程序往往会创建很多进程,当出现问题或者想终止执行的时候很麻烦,有时候忘记kill子进程,会出现一些很诡异的情况(如子进程需要写文件)。写个脚本kill进程树,方便以后系统维护使用。

#!/bin/shif [ $# -ne 1 ]then    echo -e "\033[;36mUsage:\033[0m" "\033[;32mkillall\033[0m" "\033[;33mPID\033[0m"    exitelse    root=$1fifunction treekill(){    local father=$1    # children    childs=(`ps -ef | awk -v father=$father 'BEGIN{ ORS=" "; } $3==father{ print $2; }'`)    if [ ${#childs[@]} -ne 0 ]    then        for child in ${childs[*]}        do            treekill $child        done    fi    # father     echo -e "\033[;32mkill\033[0m" "\033[;36mpid\033[0m" "\033[;33m$father\033[0m"    kill -9 $father}treekill $root

测试一下:

test.sh 如下

#!/bin/shsh ./test1.sh &sleep 55555555 &sleep 7777777
test1.sh 如下

#!/bin/shsleep 55555555 &sleep 7777777
运行

sh test.sh &killtree pid # test.sh 的进程ID


原创粉丝点击