搜索了網上好像並沒有殺掉指定進程下所有子進程(包括子進程的子進程)的腳本,自己琢磨寫了一版,雖說比較簡單,但希望分享大家,幫助需要的人 ...
搜索了網上好像並沒有殺掉指定進程下所有子進程(包括子進程的子進程)的腳本,自己琢磨寫了一版,雖說比較簡單,但希望分享大家,幫助需要的人
#!/bin/sh # 遞歸找到進程最底層子進程並殺除. mainName=$1 echo "=====開始=====" #grep -v可以過濾掉grep的進程,但測試時有時會出現問題,所以加上獲取第一行 mainId=`ps -ef |grep ${mainName}|grep -v 'grep' |head -1|cut -c 9-15`
#也可以使用這種方法獲取查出的第一個參數
#mainId=`ps -A |grep ${mainName}|awk '{print $1}'` #去掉空格 mainId=`echo ${mainId}|sed 's/ //g'` echo "mainId===${mainId}" #查主進程下所有子進程 格式為main.sh(275)---children1.sh(27641)---sleep(27643) pidLine=`pstree -p ${mainId}` echo "pidLine===pidLine${pidLine}" #取括弧中的內容 pidLine=`echo $pidLine | awk 'BEGIN{ FS="(" ; RS=")" } NF>1 { print $NF }'` #echo $pidLine for pid in $pidLine do echo "kill -9 ${pid}" kill -9 ${pid} done