shell 如何显示哪些用户正在运行哪些进程以及它们占用了多少内存?

uurv41yg  于 2023-02-13  发布在  Shell
关注(0)|答案(1)|浏览(97)

所有人。
我目前正在Bash中创建一个小脚本。
我正在尝试创建一个程序,它将显示所有运行进程的每次使用和多少内存每个进程占用。我知道我需要使用ps aux命令。
基本上,我希望输出如下所示

USER     PROCESS    MEMORY
ROOT     Process1      10KB
         Process2     120KB
USER1    Process 1    50KB
         Process 4     1 KB

这是我目前的代码,我不知道如何进一步

#!/bin/bash

runningUsers=$( ps aux | awk '{ print $1 }' | sed '1 d' | sort | uniq | perl -e 'for (<>) { chomp; $u = ( getpwnam($_) )[2]; print $_, "\n" if ( ( $u >= 1000 || $u == 0 ) && ( $_ =~ /[[:alpha:]]/ && $_ ne "nobody" ) ) }')
echo $runningUsers

users=($runningUsers)

echo "${users[0]}"
oogrdqng

oogrdqng1#

噗,你让自己很难。
为什么不坚持基本的,这已经提供了你所需要的。

#!/bin/bash
ps -eo user,pid,%mem,comm --sort=-%mem | awk '
BEGIN {
  printf "%-10s %-20s %-10s\n", "USER", "PROCESS", "MEMORY"
}
{
  printf "%-10s %-20s %-10s\n", $1, $4, sprintf("%.2f KB", $3*1024)
}'

printf %10语句用于宽度。
此脚本提供:

root@vm-local-1:~# ./test.sh
USER       PROCESS              MEMORY
USER       COMMAND              0.00 KB
root       unattended-upgr      512.00 KB
root       networkd-dispat      409.60 KB
root       multipathd           409.60 KB
root       systemd-journal      409.60 KB
systemd+   systemd-resolve      307.20 KB

相关问题