实时获取/proc监控信息

/proc 文件系统是一个虚拟文件系统,通过对该文件中监控的系统状态信息进行计算,从而获取进程的CPU使用情况以及内存信息.

但是/proc文件系统是实时监控,对于执行时间较短的shell脚本,无法永久保存其执行信息,若要实时查询,只能先获取进程pid,将/proc中的文本保存

自然而然想到了文件输出重定向,将/proc/[pid]/status文件重定向到自定义文本中:

#!/bin/bash
echo "PID of this script is:$$"
a=0
a=$[$a+1]
/proc/$$/status > ~/Documents/a.txt

但是发现,错误信息总是/proc文件缺少读取权限

./testa.sh: line 5: /proc/8330/status: Permission denied

可能和这个虚拟文件有关系吧,或许是不支持重定向,只能换个读取方式了

#!/bin/bash
echo "PID of this script is:$$"
a=0
a=$[$a+1]
cat /proc/$$/status | while read myline
do
 echo "LINE:"$myline
done

经过尝试,可从/proc中一行行读取,对于读取的数据,除了显示在终端,还可以保存在文件中:

#!/bin/bash
echo "PID of this script is:$$"
a=0
a=$[$a+1]
cat /proc/$$/status | while read myline
do
 echo "$myline" >> ~/Documents/a.txt
done

效果如下:

Name:	test.sh
State:	S (sleeping)
Tgid:	8553
Ngid:	0
Pid:	8553
PPid:	2177
TracerPid:	0
Uid:	1000	1000	1000	1000
Gid:	1000	1000	1000	1000
FDSize:	256
Groups:	4 24 27 30 46 113 128 1000
NStgid:	8553
NSpid:	8553
NSpgid:	8553
NSsid:	2177
VmPeak:	   14284 kB
VmSize:	   14284 kB
VmLck:	       0 kB
VmPin:	       0 kB
VmHWM:	    2944 kB
VmRSS:	    2944 kB
VmData:	     156 kB
VmStk:	     132 kB
VmExe:	     976 kB
VmLib:	    2104 kB
VmPTE:	      48 kB
VmPMD:	      12 kB
VmSwap:	       0 kB
HugetlbPages:	       0 kB
Threads:	1
SigQ:	0/14914
SigPnd:	0000000000000000
ShdPnd:	0000000000000000
SigBlk:	0000000000010000
SigIgn:	0000000000000004
SigCgt:	0000000000010002
CapInh:	0000000000000000
CapPrm:	0000000000000000
CapEff:	0000000000000000
CapBnd:	0000003fffffffff
CapAmb:	0000000000000000
Seccomp:	0
Speculation_Store_Bypass:	vulnerable
Cpus_allowed:	ff
Cpus_allowed_list:	0-7
Mems_allowed:	00000000,00000001
Mems_allowed_list:	0
voluntary_ctxt_switches:	1
nonvoluntary_ctxt_switches:	0

猜你喜欢

转载自www.cnblogs.com/o-din/p/9265234.html
今日推荐