原创

centos 脚本,获取进程信息并按内存占用大小排序

脚本

下载文件 memory_info.sh

#!/bin/bash

# 获取进程信息并按内存占用大小排序
processes=$(ps -eo pid,comm,rss,command --sort=-rss | awk '{if(NR>1) print $0}')

# 打印表头
printf "%-10s %-20s %-17s %-30s %-s\n" "PID" "程序名称" "内存占用(G)" "程序运行目录" "程序运行路径"

# 遍历进程信息并打印
while read -r line; do
    pid=$(echo "$line" | awk '{print $1}')
    program_name=$(echo "$line" | awk '{print $2}')
    memory_usage=$(echo "$line" | awk '{print $3}')
    program_path=$(echo "$line" | awk '{$1=$2=$3=""; print $0}')

    # 将内存占用由KB转换为GB
    memory_usage_gb=$(awk "BEGIN {printf \"%.2f\", $memory_usage/1024/1024}")

    # 获取程序运行目录
    program_cwd=$(readlink -e /proc/"$pid"/cwd)

    printf "%-10s %-20s %-17s %-30s %-s\n" "$pid" "$program_name" "$memory_usage_gb" "$program_cwd" "$program_path"
done <<< "$processes"

常见问题

1、在 windows 环境下,编辑脚本,上传到 linux 上,无法运行

原因:

windows 下,每一行的结尾是 \n\r
linux 下,每一行的结尾是 \n
在 windows 下编辑过的文件在 linux 下每一行的结尾就会多出来一个字符 \r,用 cat -A 文件 查看时 \r 字符被显示为 ^M

解决方法:

使用下面的命令,删除 \r 字符

sed -i 's/\r$//' 文件
2、脚本没有执行权限

使用下面的命令,授予文件执行权限

chmod +x 文件
正文到此结束