Shell Kill 进程树
Shell Kill 进程树
Shell 脚本程序往往会创建很多进程,当出现问题或者想终止执行的时候很麻烦,有时候忘记kill子进程,会出现一些很诡异的情况(如子进程需要写文件)。写个脚本kill进程树,方便以后系统维护使用。
- #!/bin/sh
- if [ $# -ne 1 ]
- then
- echo -e "\033[;36mUsage:\033[0m" "\033[;32mkillall\033[0m" "\033[;33mPID\033[0m"
- exit
- else
- root=$1
- fi
- function 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/sh
- sh ./test1.sh &
- sleep 55555555 &
- sleep 7777777
- #!/bin/sh
- sleep 55555555 &
- sleep 7777777
- sh test.sh &
- killtree pid # test.sh 的进程ID
评论暂时关闭