脚本如下:
[root@localhost shell]# vim linuxprocess.sh
#!/bin/bash
running=0 -----用于统计正在运行的程序
sleeping=0 -----用于统计正在睡眠的进程,但可被唤醒
stoped=0 -----用于统计停止的程序
zombie=0 ------用于统计僵尸程序,进程已经终止但无法被删除至内存外
for pid in /proc/[1-9]* -----循环在proc目录下当前计算机正在运行的进程的进程PID,在该文件下是以数字开头的
do
procs=$[procs+1] ----统计进程的数量
stat=$(awk '{print $3}' $pid/stat) ----过滤在每个pid下的stat文件,第三行是代表进程的状态的
case $stat in -------用case语句循环的统计进程的状态
R)
running=$(running+1);;
T)
stoped=$[stoped+1];;
S)
sleeping=$[sleeping+1];;
Z)
zombie=$[(zombie+1)];;
esac
done
echo "进程统计信息"
echo "总进程数量为:$procs"
echo "Running 进程数为:$running"
echo "Stoped进程数为:$stoped"
echo "Slepping进程数为:$sleeping"
echo "Zombie进程数为:$zombie"
脚本的运行结果展示:
[root@localhost shell]# sh linuxprocess.sh
进程统计信息
总进程数量为:116
Running 进程数为:0
Stoped进程数为:0
Slepping进程数为:116
Zombie进程数为:0