linux - 按 CPU 时间过滤 ps 输出

标签 linux bash awk

不确定这属于这里还是属于 Linux 和 Unix。

我正在运行以下命令...:

ps -eo pid -eo pcpu -eo pmem -eo time -eo command | sort -k 2 -r | awk '/frmweb/ && !/PID/ && $2+0>0' > /tmp/deadpidlist.log

要得到这样一个不错的列表:

7445  3.4  0.3 00:00:06 frmweb webfile=HTTP-0,bosscars_prod_jpi
7570  2.2  0.2 00:00:01 frmweb webfile=HTTP-0,prod_sso
7550  1.3  0.2 00:00:01 frmweb webfile=HTTP-0,prod_sso
24730  0.8  0.3 00:01:55 frmweb webfile=HTTP-0,prod_sso
7557  0.8  0.2 00:00:00 frmweb webfile=HTTP-0,prod_sso
16893  0.6  0.2 00:02:19 frmweb webfile=HTTP-0,prod_sso
20906  0.5  0.2 00:01:40 frmweb webfile=HTTP-0,prod_sso

这有一段时间没问题,但我的脚本喜欢获取刚刚生成的进程。因此,我想做的是通过仅考虑 CPU 时间超过一分钟的 PIDS(第 4 列)来进一步过滤此列表。

谢谢!

最佳答案

改用这个:

... | awk '/frmweb/ && !/PID/ && $2+0>0 && substr($4,4,2)+0>1'

substr 函数允许您从第 4 列的位置 4 开始获取 2 个字符(以及之后的两个字符)以针对 >1 条件进行测试。如果为真,则打印该行。

或者,按照 chepner 的建议在评论中:

... | awk '/frmweb/ && !/PID/ && $2+0>0 && $4!~"00:00:"'

关于linux - 按 CPU 时间过滤 ps 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25732291/

相关文章:

linux - logrotate.conf 中 "daily"关键字的用途是什么

bash - 运行两个程序,同时保持第一个连接的标准输入

bash - 如何删除特定命名空间的特定部署的所有 pod?

awk - 尝试将转义字符作为变量传递给 awk

awk - 如何将字段分隔符设置为空字符串?

bash - 在 bash/sed/awk 中提取文件的最后一个字

linux - 关闭电源时,Ubuntu关闭打开电源时打开

linux - 如何在 Bash 中将变量与字符串连接起来?

java - 通过Linux脚本设置类路径

bash - 在 shell 脚本中重新分配全局变量