web-dev-qa-db-ja.com

ps RSS(メモリ)出力をより人間が使いやすい形式にできますか?

実行中ps uxは、プロセス情報のニースリストを返します。grepまたはwatchを使用すると簡単です。ただし、メモリ使用量の出力にはそれほど柔軟性がないようです。 RSS(常駐セットサイズ)はkBで出力されます。これは、大規模なプロセスでは(特に一目で)読み取るのが難しいため、%MEM100×RSS/system_memory

duユーティリティには素敵な-hよりユーザーフレンドリーな方法でスペースを出力するフラグ。 psに相当するものを見つけることができませんでした。これを達成できる特別なフォーマットのトリックはありますか?

12
metasoarous
ps ux | numfmt --header --to=iec --field 5,6 --padding 6

Coreutils> = 8.25が必要です

私は個人的にこれを好む:

ps -eo pmem,comm,pid,maj_flt,min_flt,rss,vsz --sort -rss | numfmt --header --to=iec --field 4-5 | numfmt --header --from-unit=1024 --to=iec --field 6-7 | column -t | head
19
adrianlzt

psには適切なフラグがないようです。そのため、別のツール(私はhtopを好みます)を使用するか、ps出力を少し混乱させる必要があります。 psを使い続けたいと思います。ここに私が例として作った汚い小さなスクリプトがあります:

# get terminal width
WIDTH=`tput cols`
# pipe stdin to awk
cat | \
awk '\
BEGIN {
    # set output format
    CONVFMT="%.2f"
}
NR==1 {
    # search first line for columns that need to be converted from K to M
    for (i=1;i<=NF;i++) 
        # add condition for new columns if you want
        if ($i=="VSZ" || $i=="RSS") {
            # column numbers are stored in an array
            arr[i]=i; 
            $i = $i "(MB)"
        }
}
NR > 1 {
    # edit appropriate columns
    for (i in arr)
        $i=$i/1024; 
}
{
    # print every line
    print $0
}' | \
# format the output into columns and trim it to terminal width
column -t | cut -c 1-$WIDTH

ファイルに保存します。たとえば、prettyps.sh、実行可能にします:

chmod + x prettyps.sh

次のように使用します。

pS UX | /path/to/prettyps.sh

このスクリプトを使用すると、ps出力に追加のプロセスが追加されるという欠点がありますが、それでも機能します。

 $ ps ux | ./prettyps.sh
USER PID%CPU%MEM VSZ(MB)RSS(MB)TTY STAT START TIME COMMAND 
 pono 2658 0.0 0.0 358.88 4.29? Sl 02:33 0:00/usr/bin/gnome-keyring 
 ...出力が切り捨てられました... 
 pono 4507 0.0 0.0 19.14 1.81 pts/1 S + 03:29 0:00男性
 pono 4518 0.0 0.0 10.55 0.96 pts/1 S + 03:29 0:00ポケットベル
 pono 4727 0.7 0.9 1143.59 53.08? SSL 04:10 0:24 /opt/sublime_text/subl
pono 4742 0.1 0.4 339.05 25.80? Sl 04:10 0:03 /opt/sublime_text/plug
pono 5177 0.0 0.0 19.23 1.32 pts/0 R + 05:05 0:00 ps 
 pono 5178 0.0 0.0 4.34 0.61 pts/0 S + 05:05 0:00/bin/sh 

これがあなたに合った方法を見つけるのに役立つことを願っています。

5
Pono

@adrianlxtへの小道具!これは私の新しいエイリアス「pss」です。

ps -eo pid,pmem,rss,vsz,comm,command --sort -rss | numfmt --header --from-unit=1024 --to=iec --field 3-4 | awk '$3 != 0'

0
Ryan