筛选进程信息的shell脚本的解析

#!/bin/bash

while true ; do
    DATE=$(date | tr -d '\n')
    INFO=$(ps -eo pid,comm,vsz,rss,maj_flt,min_flt | grep demand_paging | grep -v grep)
    if [ -z "$INFO" ] ; then
        echo "$DATE: target process seems to be finished"
        break
    fi
    echo "${DATE}: ${INFO}"
    sleep 1
done
解析以上sh文件

下面是对这个Shell脚本的详细解析:

整体功能概述

此脚本的功能是持续监控名为demand_paging的进程,每隔1秒输出该进程的相关信息,若该进程不再运行,就输出提示信息并终止监控。

代码逐行解析

#!/bin/bash

这一行属于Shebang,它表明该脚本要使用bash解释器来执行。

while true ; do

这是一个无限循环,while true意味着条件永远为真,循环会一直执行,直到遇到break语句才会终止。

    DATE=$(date | tr -d '\n')
  • date命令用于获取当前的日期和时间。
  • tr -d '\n'会把date命令输出中的换行符去除,确保DATE变量里不包含换行符。
    INFO=$(ps -eo pid,comm,vsz,rss,maj_flt,min_flt | grep demand_paging | grep -v grep)
  • ps -eo pid,comm,vsz,rss,maj_flt,min_flt
    • ps命令用于显示当前运行进程的信息。
    • -e表示显示所有进程。
    • -o用来指定输出格式,这里指定输出pid(进程ID)、comm(进程名称)、vsz(虚拟内存大小)、rss(物理内存大小)、maj_flt(主要页错误次数)和min_flt(次要页错误次数)。
  • grep demand_paging:过滤出进程名称包含demand_paging的进程。
  • grep -v grep:排除包含grep的进程,避免把grep demand_paging这个进程自身也统计进去。
    if [ -z "$INFO" ] ; then

-z是一个测试操作符,用于检查字符串是否为空。如果INFO变量为空,就意味着没有找到名为demand_paging的进程。

        echo "$DATE: target process seems to be finished"

若没有找到demand_paging进程,就输出当前日期和时间,同时提示目标进程似乎已结束。

        break

执行break语句会跳出当前的无限循环,终止脚本的执行。

    echo "${DATE}: ${INFO}"

若找到了demand_paging进程,就输出当前日期和时间以及该进程的相关信息。

    sleep 1

sleep 1会让脚本暂停1秒,之后再进行下一次循环,也就是每隔1秒监控一次。

done

这是while循环的结束标志。

总结

该脚本借助ps命令持续监控名为demand_paging的进程,每隔1秒输出一次该进程的相关信息,若该进程不再运行,就输出提示信息并终止监控。

你可能感兴趣的:(linux,环境配置,shell,linux)