歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

Shell Kill 進程樹

Shell 腳本程序往往會創建很多進程,當出現問題或者想終止執行的時候很麻煩,有時候忘記kill子進程,會出現一些很詭異的情況(如子進程需要寫文件)。寫個腳本kill進程樹,方便以後系統維護使用。

  1. #!/bin/sh  
  2.   
  3. if [ $# -ne 1 ]  
  4. then  
  5.     echo -e "\033[;36mUsage:\033[0m" "\033[;32mkillall\033[0m" "\033[;33mPID\033[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 "\033[;32mkill\033[0m" "\033[;36mpid\033[0m" "\033[;33m$father\033[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  
Copyright © Linux教程網 All Rights Reserved