Bash - 内存使用情况
Bash - 内存使用情况
我有一个问题解决不了,所以我来找你了。
我需要写一个程序,能够读取所有进程,并对其按用户进行排序,对于每个用户,程序必须显示使用了多少内存。
例如:
用户1:120MB
用户2:300MB
用户3:50MB
总计:470MB
我想用 ps aux 命令来完成这个任务,然后用 awk 命令获取 pid 和用户,最后用 pmap 获取进程的总内存使用情况。
admin 更改状态以发布 2023年5月23日
尝试使用这个脚本,可能解决您的问题:\n\n
#!/bin/bash function mem_per_user { # take username as only parameter local user=$1 # get all pid's of a specific user # you may elaborate the if statement in awk obey your own rules pids=`ps aux | awk -v username=$user '{if ($1 == username) {print $2}}'` local totalmem=0 for pid in $pids do mem=`pmap $pid | tail -1 | \ awk '{pos = match($2, /([0-9]*)K/, mem); if (pos > 0) print mem[1]}'` # when variable properly set if [ ! -z $mem ] then totalmem=$(( totalmem + $mem)) fi done echo $totalmem } total_mem=0 for i in `seq 1 $#` do per_user_memory=0 eval username=\$$i per_user_memory=$(mem_per_user $username) total_mem=$(( $total_mem + $per_user_memory)) echo "$username: $per_user_memory KB" done echo "Total: $total_mem KB"
\n\n最好的问候!
这只是一个小更新,用户会自动选择
#!/bin/bash function mem_per_user { # take username as only parameter local user=$1 # get all pid's of a specific user # you may elaborate the if statement in awk obey your own rules pids=`ps aux | awk -v username=$user '{if ($1 == username) {print $2}}'` local totalmem=0 for pid in $pids do mem=`pmap $pid | tail -1 | \ awk '{pos = match($2, /([0-9]*)K/, mem); if (pos > 0) print mem[1]}'` # when variable properly set if [ ! -z $mem ] then totalmem=$(( totalmem + $mem)) fi done echo $totalmem } total_mem=0 for username in `ps aux | awk '{ print $1 }' | tail -n +2 | sort | uniq` do per_user_memory=0 per_user_memory=$(mem_per_user $username) if [ "$per_user_memory" -gt 0 ] then total_mem=$(( $total_mem + $per_user_memory)) echo "$username: $per_user_memory KB" fi done echo "Total: $total_mem KB"