命令如下:
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为单位)和进程的命令行,并且标题行会显示在第一行。