psコマンドを使用して特定のプロセス数を取得し、ユーザーごとにソートして計算する方法

psコマンドを使用して特定のプロセス数を取得し、ユーザーごとにソートして計算する方法

ユーザー固有のプロセス数を確認する必要があります。たとえば、

ps -ef | grep apache

これには、すべてのApacheプロセスが一覧表示されます。これで、各ユーザーに対してLinuxで実行されているプロセスの数を計算したいと思います。

どうすれば入手できますか?

答え1

短い解決策:

ps -eo "%U" --sort=user h | uniq -c

  • --sort=user- ソート基準user name

  • uniq -c- 一意のユーザーあたりのプロセス数を計算します。

答え2

1つの解決策:

gohu@Luna:~$ ps -ef | grep -v '^UID' | awk '{print $1}' | sort | uniq -c | sort -rg
    151 gohu
    149 root
      2 nobody
      2 avahi
      1 syslog
      1 rtkit
      1 ntp
      1 message+
      1 daemon
      1 colord

そして:

  • ps -ef:ユーザーを行の最初の要素としてプロセスを一覧表示します。
  • grep -v '^UID': ヘッダー行の削除
  • awk '{print $1}':行の最初の要素を取得します(ユーザー)。
  • sort:実行する前にソートが必要ですuniq -c
  • uniq -c:重複行をマージし、発生回数を計算します。
  • sort -rg: 数値の並べ替え、最も頻繁に発生する項目を先頭に配置

答え3

努力する

ps -e -o user h| awk '{u[$1]++} END { for (user in u ) printf "%s:%d\n",user,u[user]}'

どこ

  • -eすべてのプロセスを一覧表示
  • -o user出力ユーザーのみ
  • hタイトルを表示しない
  • awk はユーザー数を計算し、ps 出力の末尾にその数を表示します。

編集:@Gohuのおかげで(一種)短縮することができます。

ps -e -o user h| sort | uniq -c | sort -rg

答え4

POSIX的に:

ps -Ao user= | sort | uniq -c | sort -rn

関連情報