命令如下:
ps -eo pid,%mem,rss,cmd --sort=-rss | awk 'NR==1{print "PID\t%MEM\tRSS(MB)\tCOMMAND"} NR>1{printf "%-8s %-6s %6.0fMB %s\n", $1, $2"%", $3/1024, $4}' | head -11
输出效果如下:
PID %MEM RSS(MB) COMMAND
1234 50% 1024MB example_process1
5678 30% 512MB example_process2
...
让我们逐步解释这行命令:
ps
: 这是用于查看当前系统进程信息的命令。-eo pid,%mem,rss,cmd
: 这是ps
命令的参数,用于指定输出的格式。pid
表示进程ID,%mem
表示内存占用百分比,rss
表示进程的实际物理内存占用大小(以KB为单位),cmd
表示进程的命令行。--sort=-rss
: 使用--sort
参数来按照内存占用进行逆序排序(从高到低)。-rss
表示按照RSS字段(物理内存占用)进行逆序排序。|
: 这是管道操作符,它将一个命令的输出作为另一个命令的输入。在这里,它将ps -eo pid,%mem,rss,cmd --sort=-rss
的输出作为awk
命令的输入。awk
: 这是用于文本处理的强大命令行工具。'NR==1{print "PID\t%MEM\tRSS(MB)\tCOMMAND"}'
: 这是awk
的第一个动作,表示处理输入的第一行(标题行)。在这里,当行号NR
等于1时,awk
会打印输出一个标题行,其中包含PID、内存占用百分比、物理内存占用(以MB为单位)和进程的命令行。'NR>1{printf "%-8s %-6s %6.0fMB %s\n", $1, $2"%", $3/1024, $4}'
: 这是awk
的第二个动作,表示处理输入的其他行(从第二行开始)。在这里,当行号NR
大于1时,awk
会格式化输出进程的相关信息。$1
、$2
、$3
和$4
分别代表输入行的第1列、第2列、第3列和第4列,即进程ID、内存占用百分比、物理内存占用(以KB为单位)和进程的命令行。printf
语句按照指定的格式输出这些信息,并且将内存占用($3/1024)转换为以MB为单位,使用%-8s
和%-6s
来使输出结果对齐。|
: 再次使用管道操作符,将awk
的输出作为head
命令的输入。head -11
: 最后,使用head
命令截取前11行结果。这里需要注意的是,标题行已经占用了一行,所以这里截取的是剩下的前10行结果(10个进程信息加上1个标题行),因此显示占用内存最多的10个进程的信息。
综上,该命令的目的是列出占用内存最多的10个进程的PID、内存占用百分比、物理内存占用(以MB为单位)和进程的命令行,并且标题行会显示在第一行。