使用 top 从 PID 和 COMMAND 获取前 5 行

Posted

技术标签:

【中文标题】使用 top 从 PID 和 COMMAND 获取前 5 行【英文标题】:Getting the first 5 lines from PID and COMMAND using top 【发布时间】:2022-01-20 10:46:28 【问题描述】:

嗨,我正在努力弄清楚如何在打开顶部时获取 PID 和 COMMAND 标头的前 5 行

目前我正在使用

top | awk 'print $1,$2NR==5exit'

这显然很烦人:

Processes: 390
2021/12/17 13:47:48
Load Avg:
CPU usage:
SharedLibs: 146M

【问题讨论】:

【参考方案1】:

使用您显示的示例,请尝试以下代码。由于您需要前 5 个 PID 详细信息,因此此处无法打印前 5 行。所以跳过 top 输出的前 6 行(关于系统细节)。

top -b | awk 'FNR>=7 && FNR<=12print $1;FNR==12exit'

解释: 对上述代码的简单解释是,将top 命令的输出作为标准输入传递给awk。然后在awk程序检查条件如果行号是从第7到第12然后打印它并在第12行退出程序。

其中top -b选项的定义如下man top:

b :Batch-mode operation 以 Batch 模式启动 top,可以是 用于将输出从顶部发送到其他程序或文件。在 这种模式,top 将不接受输入并运行直到迭代 您使用 `-n' 命令行选项设置的限制或直到被杀死。

【讨论】:

我得到的结果包括其他数据字段,而不仅仅是 PID 和 COMMAND。我将如何修改它以仅显示这两个字段 @Alex,好的,请尝试top -b | awk 'FNR&gt;=7 &amp;&amp; FNR&lt;=12print $1;FNR==12exit' 代码一次,如果一切顺利,请告诉我? 在修改印刷品以包含 12 美元后效果极佳。谢谢!【参考方案2】:

其他解决方案:

top -b 用于批处理模式 top -n 1 单发(无循环)

获取线

带有 --> 头 -12 |尾 -6 或 --> awk 'FNR>=7 && FNR 或 --> sed -n 7,12p

打印 PID 和命令

awk 'print $1, $NF'

...

top -b|head -12|tail -6|awk 'print $1, $NF'
top -b -n 1|awk 'FNR>=7 && FNR<=12print $1, $NF'
top -b -n 1|sed -n 7,12p|awk 'print $1, $NF'
         


         

【讨论】:

接受的答案没有涵盖什么?你能edit你的答案提供更多解释吗?

以上是关于使用 top 从 PID 和 COMMAND 获取前 5 行的主要内容,如果未能解决你的问题,请参考以下文章

top在哪里获取实时数据

Linux下top命令详解

Linux运维必知:如何从其 PID 中查找进程名称

linux如何获取占用CPU最高的线程id?(java项目)

04_top(监测磁盘)

怎么获取网卡的Pid和vid