Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Shell Kill 进程树

Shell 脚本程序往往会创建很多进程,当出现问题或者想终止执行的时候很麻烦,有时候忘记kill子进程,会出现一些很诡异的情况(如子进程需要写文件)。写个脚本kill进程树,方便以后系统维护使用。
  1. #!/bin/sh  
  2.   
  3. if [ $# -ne 1 ]  
  4. then  
  5.     echo -e "33[;36mUsage:33[0m" "33[;32mkillall33[0m" "33[;33mPID33[0m"  
  6.     exit  
  7. else  
  8.     root=$1  
  9. fi  
  10.   
  11. function treekill()  
  12. {  
  13.     local father=$1  
  14.   
  15.     # children  
  16.     childs=(`ps -ef |   
  17.              awk -v father=$father "BEGIN{ ORS=" "; } $3==father{ print $2; }"`)  
  18.     if [ ${#childs[@]} -ne 0 ]  
  19.     then  
  20.         for child in ${childs[*]}  
  21.         do  
  22.             treekill $child  
  23.         done  
  24.     fi  
  25.   
  26.     # father   
  27.     echo -e "33[;32mkill33[0m" "33[;36mpid33[0m" "33[;33m$father33[0m"  
  28.     kill -9 $father  
  29. }  
  30.   
  31. treekill $root  
测试一下:test.sh 如下
  1. #!/bin/sh  
  2.   
  3. sh ./test1.sh &  
  4. sleep 55555555 &  
  5. sleep 7777777  
test1.sh 如下
  1. #!/bin/sh  
  2.   
  3. sleep 55555555 &  
  4. sleep 7777777  
运行
  1. sh test.sh &  
  2. killtree pid # test.sh 的进程ID