计算机系统平台实验——使用shell写一个进程监控脚本


实验目的

熟悉操作系统接口,了解脱机用户接口,掌握基本shell编程。
目的:了解系统进程的查看和控制
要求:写一个脚本,它能够定时检查另外一个给定进程是否在运行,如果该进程没有运行,则启动该进程。
提示:使用ps、grep命令,可以使用循环或者定时器进程 crond。

实验截图

在这里插入图片描述

实验步骤

(1) 使用$1来获取进程参数

(2) 创建一个until循环,循环尾为$a等于20

(3) 使用ps命令查看指定进程是否在执行:ps_out=ps -ef | grep $1 | grep -v 'grep' | grep -v $0。并且获取它的执行状况:result=$(echo $ps_out | grep “$1”)

(4) 使用if else语句,只要$result没法返回到信息就证明进程在运行,提示进程在运行。
否则在后台调用指定进程nohup “$1” &,提示进程开始运行

(5) 每隔一秒系统休眠一次,sleep 1,实现秒级监控

源码

#!/bin/sh

a=0

until [ ! $a -lt 20 ]
do

ps_out=`ps -ef | grep $1 | grep -v 'grep' | grep -v $0`
result=$(echo $ps_out | grep "$1")
if [[ "$result" != "" ]];then
    echo -e "\033[34m Target thread is running. 目标进程正在执行 \033[0m"

    let a+=1
else
    echo -e "\033[33m Target thread isn't running. 目标进程未执行,即将唤醒 \033[0m"
    nohup "$1" &

    echo -e "\033[44;37m Target thread is now running. 目标进程已被唤醒 \033[0m"
    let a+=1
fi   
   sleep 1
#done
#let a+=1
done
exit 0

实验体会

这是我第一次在Linux内核上编译shell脚本。在开始编译之前,我仔细地学习了shell命令的基础知识和基本方法。在我开始编写代码之前,我就已经看了几小时的专业代码以及教程了。我为了编写一个能够以秒级执行的程序,学习了定时器进程crond,但由于代码服务结构太复杂而被迫放弃。我立刻开始尝试利用循环来执行监控。我发现until可以建立一个有尾的循环,于是我利用until与sleep,建立秒级监测。然后,我自学了ps -ef | grep以及其他基于它的命令,获得了一个进程执行时的信号,并且凭借这个信号配合if else循环来唤起线程或显示进程在执行。这次实验使我对Linux内核的shell脚本有了初步了解,学会了编译shell脚本,学会了监测程序是否在运行,学会了在后台运行一个线程,学会了给shell脚本写权限,学会了利用一个脚本调用另一个脚本。

本课程资源包

我整理了本课程一学期的四次实验和作业,带有详解,内含期末复习资料和课件。链接:

链接:https://pan.baidu.com/s/1cvvO_ntbqad5Xa-hbvHZQg 
提取码:f2t0 
复制这段内容后打开百度网盘手机App,操作更方便哦--来自百度网盘超级会员V1的分享
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值