2

ここに画像の説明を入力以下の問題:

スクリプト: pid,user... を指定して ps コマンドを実行し、awk を使用して、さまざまなプロセスの全体的な CPU 使用率を合計しようとしています。

指示:

> $ps -eo pid,user,state,comm,%cpu,command --sort=-%cpu | egrep -v '(0.0)|(%CPU)' | head -n10 | awk '
> { process[$4]+=$5; }
> END{
>   for (i in process)
>   {
>     printf($1" "$2" "$3" ""%-20s %s\n",i, process[i]"   "$6) ;
>   }
> 
>    }' | sort -nrk 5 | head

Awk: プロセス名に従って 5 列目を合計します (4 列目)

出力:

 1. 10935 zbynda S dd              93.3   /usr/libexec/gnome-terminal-server
 2. 10935 zbynda S gnome-shell     1.9    /usr/libexec/gnome-terminal-server
 3. 10935 zbynda S sublime_text    0.6    /usr/libexec/gnome-terminal-server
 4. 10935 zbynda S sssd_kcm        0.2    /usr/libexec/gnome-terminal-server

ご覧のとおり、4 番目と 5 番目の列はすべて適切ですが、他の列 (行/列) は ps コマンドからの最初のエントリにすぎません。4 番目の列のように 4 つの異なるプロセスがあるはずですが、たとえば、最後の列には同じプロセスが 1 つしか表示されていません。

ps コマンドから他のエントリを取得するには? (最初のエントリーだけではありません)

4

2 に答える 2