龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 操作系统 > LINUX系统 >

使用 shell 脚本对 Linux 系统和进程资源进行监控

时间:2014-05-30 02:01来源:网络整理 作者:网络 点击:
分享到:
Shell 语言对于接触 LINUX 的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。实际上 Shell 是一个命令

Shell 简介

Shell 语言对于接触 LINUX 的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。实际上 Shell 是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。它没有一般编程语言的“编译 - 链接 - 运行”过程。不仅如此,Shell 有自己的编程语言用于对命令的编辑,它允许用户编写由 shell 命令组成的程序。Shell 编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的 Shell 程序与其他应用程序具有同样的效果。当然,Shell 功能也是很强大的。Shell 有多种类型,其中最常用的几种是 Bourne shell(sh)、C shell(csh)和 Korn shell(ksh)。三种 shell 各有优缺点,Linux 操作系统缺省的 shell 一般是 Bourne Again shell,它是 Bourne shell 的扩展,简称 Bash,bash 的命令语法是 Bourne shell 命令语法的超集,并且在 Bourne shell 的基础上增加、增强了很多特性。在这里,我们以 Bash 做为实例总结了使用 Shell 对系统和进程资源进行监控的一些内容,希望对您能有帮助。


使用 Shell 对进程资源进行监控

检查进程是否存在

在对进程进行监控时,我们一般需要得到该进程的 ID,进程 ID 是进程的唯一标识,但是有时可能在服务器上不同用户下运行着多个相同进程名的进程,下面的函数 GetPID 给出了获取指定用户下指定进程名的进程 ID 功能(目前只考虑这个用户下启动一个此进程名的进程),它有两个参数为用户名和进程名,它首先使用 ps 查找进程信息,同时通过 grep 过滤出需要的进程,最后通过 sed 和 awk 查找需要进程的 ID 值(此函数可根据实际情况修改,比如需要过滤其它信息等)。


清单 1. 对进程进行监控
 

				
 function GetPID #User #Name 
 { 
    PsUser=$1 
    PsName=$2 
    pid=`ps -u $PsUser|grep $PsName|grep -v grep|grep -v vi|grep -v dbx\n 
    |grep -v tail|grep -v start|grep -v stop |sed -n 1p |awk '{print $1}'` 
    echo $pid 
 } 

示例演示:

1)源程序(例如查找用户为 root,进程名为 CFTestApp 的进程 ID)

    PID=`GetPID root CFTestApp` 
 
    echo $PID 

2)结果输出

    11426 
    [dyu@xilinuxbldsrv shell]$ 

3)结果分析

从上面的输出可见:11426 为 root 用户下的 CFTestApp 程序的进程 ID。

4)命令介绍

1. ps: 查看系统中瞬间进程信息。
参数:-u< 用户识别码 > 列出属于该用户的程序的状况,也可使用用户名称来指定。
-p< 进程识别码 > 指定进程识别码,并列出该进程的状况。
-o 指定输出格式
2. grep: 用于查找文件中符合字符串的当前行。
参数:-v 反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行。
3. sed: 一个非交互性文本编辑器,它编辑文件或标准输入导出的文件,一次只能处理一行内容。
参数:-n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
p 标志 打印匹配行
4. awk:一种编程语言,用于在 linux/unix 下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是 linux/unix 下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk 的处理文本和数据的方式:它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出 ( 屏幕 ),如果没有指定模式,则所有被操作所指定的行都被处理。
参数:-F fs or --field-separator fs :指定输入文件折分隔符,fs 是一个字符串或者是一个正则表达式,如 -F:。
精彩图集

赞助商链接