亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        Shell腳本實現(xiàn)查殺子進程、僵尸進程

        字號:


            核心服務器上跑了一堆的腳本、程序,難免有時候會出現(xiàn)僵尸進程,死不死活不活的在那里占用資源,最初只是寫了個根據(jù)關鍵字查殺進程的linux shell腳本,后來發(fā)現(xiàn)很多時候進程死在那里的時候其實是內(nèi)部調(diào)用子進程的時候出現(xiàn)了問題,這時候光殺父進程根本沒解決根本問題。比如說rsync的時候通過ssh來連接,rsync本身沒問題,但可能ssh死掉了。因此重新寫了腳本,遞歸查找子進程。
            代碼如下:
            #!/bin/sh
            # 遞歸找到導致進程僵死的最底層子進程并殺除.
            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