/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