shell脚本实现某一进程是否运行结束的监控

时间:2022-08-29 15:02:50

问题描述


前几天,一位朋友需要实时监控Linux系统下的某一进程,当该程序运行时则继续监控,当该程序结束时需要向终端输出一句话,并做后续操作。

问题分析


要监控某一进程,最新先到的就是ps 命令列出所有进程,然后grep自己想要的进程,这样经过处理就可以得到该进程是否在运行还是已经结束了运行。这个方法无疑可以实现该问题的需求,但是这里有更简单的方法,可以利用Linux系统中的pidof命令简单的实现对进程的监控。
pidof的使用方式为:pidof 进程名。若进程存在,则返回进程的pid号,若不存在则返回空。例如: $ pidof emacs
这样,利用pidof来得到被监控的正在运行的进程的进程号,若得到的返回值为空则表明该进程已经结束或者被kill掉,就可以进行下一步的操作了。

shell代码


#!/bin/sh

flag=1
result=1
while [ "$flag" -eq 1 ]
do
sleep 1s
result=`pidof top`
if [ -z "$result" ]; then
echo "process is finished"
flag=0
fi
done
# 做相应的处理...............

代码中的top换成要监控的进程名,sleep 1s是要睡眠1秒钟,让出CPU,可以根据实际的需求选择合适的睡眠时间。
另外,被监控的如果是shell脚本的进程,则需要加上-x选项,如pidof -x 相应的脚本。

小结


pidof是一个Linux下命令,可以利用其特性写出更简单,效率更高的与进程相关的脚本。