dre*_*ool 14 bash ps text-formatting
我正在尝试编写一个脚本,该脚本可以在一段时间内监视进程的 CPU 使用情况(以创建图形)。
到目前为止,这是我正在使用的命令
ps -p $PROCID -o cputime,etimes
Run Code Online (Sandbox Code Playgroud)
我唯一担心的是 cputime 的输出似乎是[dd]hh:mm(或类似的东西,现在想不起来了)
有没有办法以秒为单位格式化 cputime,有点像 etime -> etimes 以秒为单位获取经过的时间?
编辑:这是我目前收到的输出
2-03:01:33 2653793
Run Code Online (Sandbox Code Playgroud)
我希望第一个参数以秒为单位格式化,而不是天-小时:分钟:秒。
这将第一次转换为秒:
ps -p $PROCID -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}'
Run Code Online (Sandbox Code Playgroud)
例如, ps 命令产生:
$ ps -p 5403 -o cputime,etimes
TIME ELAPSED
01:33:38 1128931
Run Code Online (Sandbox Code Playgroud)
该awk命令处理并返回:
ps -p 5403 -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}'
5618 1128931
Run Code Online (Sandbox Code Playgroud)
-F'[: ]+'
这告诉 awk 将冒号和空格都视为字段分隔符。这样,小时、分钟和秒显示为单独的字段。
/:/ {t=$3+60*($2+60*$1); print t,$NF}
初始/:/限制代码只能在包含冒号的行上工作。这将删除标题行。秒数是通过小时、分钟、秒计算出来的t=$3+60*($2+60*$1)。然后将结果值t与经过时间一起打印。
如果ps产生天、小时、分钟、秒,如:
2-03:01:33
Run Code Online (Sandbox Code Playgroud)
然后,改用此代码:
ps -p $PROCID -o cputime,etimes | awk -F'[-: ]+' '/:/ {t=$4+60*($3+60*($2+24*$1)); print t,$NF}'
Run Code Online (Sandbox Code Playgroud)
如果可能会或可能不会在输出前添加天数,请使用以下组合命令:
ps -p $PROCID -o cputime,etimes | awk -F'[-: ]+' '/:/ && NF==5 { t=$4+60*($3+60*($2+24*$1)); print t,$NF} /:/ && NF==4 {t=$3+60*($2+60*$1); print t,$NF}'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6772 次 |
| 最近记录: |