欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

Shell脚本实现监视指定进程的运行状态

程序员文章站 2022-05-24 13:02:18
在之前的博客中,曾经写了自动化测试程序的实现方法,现在开发者需要知道被测试的进程(在此指运行在linux上的主进程的)在异常退出之前的进程的运行状态,例如内存的使用率、cp...

在之前的博客中,曾经写了自动化测试程序的实现方法,现在开发者需要知道被测试的进程(在此指运行在linux上的主进程的)在异常退出之前的进程的运行状态,例如内存的使用率、cpu的使用率等。

现用shell脚本实现指定进程的运行状态。直接上代码。

#!/bin/sh
echo "`date`"
echo "start $0---------"
echo ""
#每十秒监视一下
sec=10
#取得指定进程名为mainapp,内存的使用率,进程运行状态,进程名称
eval $(ps | grep "mainapp" | grep -v grep | awk {'printf("meminfo=%s;mystatus=%s;pname=%s",$3,$4,$5)'})
echo $pname $mystatus $meminfo
testprg=""
while [ -n "$pname" -a "$mystatus" != "z" ]
do
    echo "----------`date`---------------------"
    echo $pname $mystatus $meminfo
    sleep $sec
    ####you must initialize them again!!!!!
    pname=""
    mystatus=""
    meminfo=""
    eval $(ps | grep "mainapp" | grep -v grep | awk {'printf("meminfo=%s;mystatus=%s;pname=%s",$3,$4,$5)'})
    testprg=`ps | grep "mytester" | grep -v grep | awk '{print $0}'`
    if [ -z "$testprg" ]; then
        break
    fi
    ##注意一定要再次初始化为空
    testprg=""
done
echo "end $0---($pname,$mystatus,$testprg)-------------------"
if [ -z "$pname" ]; then
        ###发现测被测试程序异常退出后,停止测试程序
    killall mytester
    echo "stop testprogram mytester"
fi
echo "`date`"
echo "---------------current status------------------"
ps | grep -e "mainapp|subapp" | grep -v grep
echo ""

样实现了每10s读取一下进程的状态,然后显示出来,当发现进程存在并且状态非z(非僵尸)时,继续监视,但是当测试程序执行完毕或是异常退出时,该脚本也会退出监视循环,退出循环后,打印出指定进程的状态。