网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的考试资料:

 

标题 Shell脚本实现查杀子进程、僵尸进程
内容
    核心服务器上跑了一堆的脚本、程序,难免有时候会出现僵尸进程,死不死活不活的在那里占用资源,最初只是写了个根据关键字查杀进程的linux shell脚本,后来发现很多时候进程死在那里的时候其实是内部调用子进程的时候出现了问题,这时候光杀父进程根本没解决根本问题。比如说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
随便看

 

在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/15 12:54:06