Shell腳本實(shí)現(xiàn)查殺子進(jìn)程、僵尸進(jìn)程
核心服務(wù)器上跑了一堆的腳本、程序,難免有時(shí)候會(huì)出現(xiàn)僵尸進(jìn)程,死不死活不活的在那里占用資源,最初只是寫(xiě)了個(gè)根據(jù)關(guān)鍵字查殺進(jìn)程的linux shell腳本,后來(lái)發(fā)現(xiàn)很多時(shí)候進(jìn)程死在那里的時(shí)候其實(shí)是內(nèi)部調(diào)用子進(jìn)程的時(shí)候出現(xiàn)了問(wèn)題,這時(shí)候光殺父進(jìn)程根本沒(méi)解決根本問(wèn)題。比如說(shuō)rsync的時(shí)候通過(guò)ssh來(lái)連接,rsync本身沒(méi)問(wèn)題,但可能ssh死掉了。因此重新寫(xiě)了腳本,遞歸查找子進(jìn)程。
#!/bin/sh
# 遞歸找到導(dǎo)致進(jìn)程僵死的最底層子進(jìn)程并殺除.
ParentProcessID=$1;
if [ "x${ParentProcessID}" = "x" ] ; then
echo "Please Supply the top Parent Process ID to be killed!"
echo "Usage:sh $0 PID [-v]"
echo "PID The Parent Process ID as root"
echo "-v is this argument supplied,no real kill operation will be performed,only process tree be show."
exit 1
fi
let IsRealKillDo=1;
if [ "x$2" = "x-v" ] ; then
let IsRealKillDo=0;
fi
echo "Begin Kill the Leaf Process of process ${ParentProcessID}" >&2
killpidList=""
function loopNextSubProcess(){
local nParentProcessID=$1
local tmpPidList=""
tmpPidList=`ps -A --format='%p%PisParent' --width 2048 -w --sort pid|grep "${nParentProcessID}isParent"|grep -v grep|grep -v "$$" | awk '{ printf $1 }'`
ps --format='%p%P%a' --width 2048 -w -p ${nParentProcessID}|grep -v grep|grep -v "$$" >&2
if [ "x${tmpPidList}" = "x" ] ; then
echo "****Got One Leaf = [${nParentProcessID}]****" >&2
killpidList="${killpidList}\n${nParentProcessID}"
return
fi
for theNextPid in ${tmpPidList} ; do
loopNextSubProcess ${theNextPid}
done
}
loopNextSubProcess ${ParentProcessID}
if [ ${IsRealKillDo} -eq 1 -a "x${killpidList}" != "x" ] ; then
for curpid in `echo -e ${killpidList}` ; do
if [ "x${curpid}" != "x" ] ; then
echo "kill -9 ${curpid}"
kill -9 ${curpid}
fi
done
else
echo -e ${killpidList}
fi
相關(guān)文章
Shell腳本連接oracle數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了Shell腳本連接oracle數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05Linux 使用grep篩選多個(gè)條件及grep常用過(guò)濾命令
這篇文章主要介紹了Linux 使用grep篩選多個(gè)條件及grep常用過(guò)濾命令,需要的朋友可以參考下2018-07-07linux shell 腳本實(shí)現(xiàn)tcp/upd協(xié)議通訊(重定向應(yīng)用)
這篇文章主要介紹了linux shell 腳本實(shí)現(xiàn)tcp/upd協(xié)議通訊(重定向應(yīng)用),需要的朋友可以參考下2015-10-10