CPU使用率に基づいてユーザーのプロセスをソートしたいです。私はこれを試しました
ps aux|tr -s " "|cut -f3 -d " "| sort -| grep "user" > file name
これはうまくいきますか?
答え1
ps
出力の列とソート順を指定できます。要件によっては、後処理に追加のコマンドが必要ない場合があります。
次のコマンドは、CPU使用率に基づいてソートされた指定されたユーザーのプロセスのリストを提供します。 (このhead
コマンドは出力を制限するためにのみ使用されます。)
[root@testvm ~]# ps -o pid,uname,pcpu,command -u root --sort=-pcpu | head
PID USER %CPU COMMAND
1 root 0.5 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
664 root 0.4 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
1226 root 0.2 sshd: root@pts/0
1261 root 0.2 [kworker/0:0]
9 root 0.1 [rcu_sched]
20 root 0.1 [kworker/0:1]
293 root 0.1 [kworker/0:1H]
875 root 0.1 -bash
1008 root 0.1 /usr/bin/python -Es /usr/sbin/tuned -l -P
この-o
オプションは、ここでプロセスID、ユーザー名、CPU使用率、およびコマンド列である出力形式を指定します。
この-u
オプションは、ps
プロセスを特定のユーザー(この場合はroot)に制限します。
この--sort
オプションは、ソート順をCPU使用率の割合として定義します。プレフィックス-
シンボル定義は降順でソートされます。
答え2
最初の検索を特定のユーザーに制限して並べ替えてから切り取ることを検討します。
ps hux -u USER | sort -k3 -n
このアプローチでは、プロセスはすでに特定のユーザーに制限されます。その後、検索プロセス全体に対してソートを実行します。tr
その後、必要に応じてcut
特定のフィールドにパイプすることができます。
パラメーター:
h
:suppress ヘッダー
u
: ユーザー指向形式
x
: BSD tty 要件の削除
-u
USER:プロセスを選択する必要がある特定のユーザー。これはリストです。
答え3
私はそうします:
ps aux | grep user | sort -rk3 > file_name
sort -rk3
について読むman sort
あなたについて:
file name
スペースは重要です。 bashはそれがファイルかどうかわからず、出力を名前付きファイルにリダイレクトし、ファイル名file
にname
スペースを追加する必要がある場合は引用符で囲む必要があります。... > "file name"
。多くのLinuxアプリケーションは、スペースを計算/縮小せずに列を選択できるほどスマートです。パーセンテージだけが必要な場合は、次のようにします。
ps aux | grep user | sort -rk3 | awk '{print $3}'
cut
たぶんそれは賢いかもしれませんが、私はそれについてあまり慣れていません。top -bn1 | grep user
同様のことをすることを検討することもできます。