shell系列1:统计 /proc 目类下 Linux 进程相关数量信息

1、关于ps aux的STAT状态解释

不管在面试中还是平时排查进程相关问题中总会使用到ps这个命令,会显示很多进程相关信息,其中STAT栏的在问题排查中是比较重要的,面试中也经常遇到【反正我遇到过几次,强行解释,哈哈】,因此花点时间搞明白,废话不多说,请往下看:

[root@localhost shell]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.2 191444  4448 ?        Ss   Mar28   0:13 /usr/lib/sy
root          2  0.0  0.0      0     0 ?        S    Mar28   0:00 [kthreadd]
root          4  0.0  0.0      0     0 ?        S<   Mar28   0:00 [kworker/0:
root          6  0.0  0.0      0     0 ?        S    Mar28   0:00 [ksoftirqd/
root          7  0.0  0.0      0     0 ?        S    Mar28   0:00 [migration/
root          8  0.0  0.0      0     0 ?        S    Mar28   0:00 [rcu_bh]
root          9  0.0  0.0      0     0 ?        S    Mar28   0:12 [rcu_sched]
root         10  0.0  0.0      0     0 ?        S<   Mar28   0:00 [lru-add-dr
root         11  0.0  0.0      0     0 ?        S    Mar28   0:02 [watchdog/0

以上是ps命令的输出信息,其他几列其实不难理解,比较难理解的是STAT 这列,man ps有关于STAT的解释:

在这里插入图片描述

状态英文解释
Duninterruptible sleep (usually IO)不可中断睡眠 (通常是在IO操作) 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生
Rrunning or runnable (on run queue)正在运行,或在队列中的进程
Sinterruptible sleep (waiting for an event to complete)可中断睡眠 (休眠中, 受阻, 在等待某个条件的形成或接受到信号)
Tstopped by job control signal已停止的,进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行
tstopped by debugger during the tracing在跟踪期间被调试器停止
Wpaging (not valid since the 2.6.xx kernel)正在换页(2.6.内核之前有效)
Xdead (should never be seen)死掉的进程
Zdefunct (“zombie”) process, terminated but not reaped by its parent僵尸进程,程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放BSD风格的
<high-priority (not nice to other users)表示高优先级的进程
Nlow-priority (nice to other users)表示低优先级的进程
Lhas pages locked into memory (for real-time and custom IO)被锁定的进程
sis a session leader某一个回话的leader进程
lis multi-threaded (using CLONE_THREAD, like NPTL pthreads do)多线程,克隆线程
+is in the foreground process group后台运行进程组

关于+ 使用man查看解释是前台进程,其实是后台进程,可以使用一个脚本放在后台运行,查看进程,他的STAT就会带一个+

在这里插入图片描述

2、使用shell脚本统计Linux中的进程数量

脚本如下,获取/proc/文件夹下的进程信息并计算各个进程的数量

#!/bin/bash

all_process=$(ls /proc/ | egrep '[0-9]+')

running_count=0
stoped_count=0
sleeping_count=0
zombie_count=0

for pid in ${all_process[*]}
do
  test -f /proc/$pid/status && state=$(egrep "State" /proc/$pid/status | awk '{print $2}')
  case "$state" in
       R)
          running_count=$((running_count+1))
       ;;
       T)
          stoped_count=$((stoped_count+1))
       ;;
       S)
          sleeping_count=$((sleeping_count+1))
       ;;
       Z)
          zombie_count=$((zombie_count+1))
          echo "$pid" >> zombie.txt
          kill -9 "$pid"
       ;;
   esac
done

echo -e "total: $((running_count+stoped_count+sleeping_count+zombie_count))\nrunning: $running_count\nstoped: $stoped_count\nsleeping: $sleeping_count\nzombie: $zombie_count"

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值