ここで印刷するためのスクリプトです合計各ユーザーのCPU使用率現在ログインして、showPerUserCPU.shは:
own=$(id -nu)
cpus=$(lscpu | grep "^CPU(s):" | awk '{print $2}')
for user in $(who | awk '{print $1}' | sort -u)
do
# print other user's CPU usage in parallel but skip own one because
# spawning many processes will increase our CPU usage significantly
if [ "$user" = "$own" ]; then continue; fi
(top -b -n 1 -u "$user" | awk -v user=$user -v CPUS=$cpus 'NR>7 { sum += $9; } END { print user, sum, sum/CPUS; }') &
# don't spawn too many processes in parallel
sleep 0.05
done
wait
# print own CPU usage after all spawned processes completed
top -b -n 1 -u "$own" | awk -v user=$own -v CPUS=$cpus 'NR>7 { sum += $9; } END { print user, sum, sum/CPUS; }'
そして、利用可能なすべてのユーザーのCPU使用率を印刷するためにわずかに変更されたバージョンがあります(ただし、CPU使用率がゼロのユーザーはスキップします)、showAllPerUserCPU.sh:
own=$(id -nu)
cpus=$(lscpu | grep "^CPU(s):" | awk '{print $2}')
for user in $(getent passwd | awk -F ":" '{print $1}' | sort -u)
do
# print other user's CPU usage in parallel but skip own one because
# spawning many processes will increase our CPU usage significantly
if [ "$user" = "$own" ]; then continue; fi
(top -b -n 1 -u "$user" | awk -v user=$user -v CPUS=$cpus 'NR>7 { sum += $9; } END { if (sum > 0.0) print user, sum, sum/CPUS; }') &
# don't spawn too many processes in parallel
sleep 0.05
done
wait
# print own CPU usage after all spawned processes completed
top -b -n 1 -u "$own" | awk -v user=$own -v CPUS=$cpus 'NR>7 { sum += $9; } END { print user, sum, sum/CPUS; }'
最初の列はユーザー名、2番目の列はCPU使用率の合計、3番目の列はCPUコアの数に応じて正規化されたCPU使用率を表します。
各ユーザーの合計メモリ使用量を表示するための関連スクリプトもあります:showPerUserMem.sh
ライブ監視の場合は、watch
コマンドを介してこれらのスクリプトを定期的に実行するだけです。
CPU使用率でソートするには、出力をにパイプしますsort -k2 -nr
。
top -u user
、結果を考慮してファイルにリダイレクトし、別のユーザーを監視できます。その後、特定の間隔でユーザーのproc使用状況を監視します。