Ist es möglich, die Ausgabe von ps RSS (Speicher) so zu formatieren, dass sie menschlicher ist?

13

Das Ausführen ps uxgibt eine schöne Liste von Prozessinformationen zurück, die einfach zu grepdurchlaufen sind oder watch. Es scheint jedoch nicht viel Flexibilität bei der Ausgabe der Speichernutzung zu geben. Die RSS(residente eingestellte Größe) wird in kB gedruckt, was für große Prozesse schwer zu lesen ist (insbesondere auf einen Blick) und %MEMergibt 100 ×  RSSsystem_memory.

Das duDienstprogramm verfügt über eine schöne -hFlagge, die den Platz benutzerfreundlicher druckt. Ich konnte nichts Äquivalentes für finden ps. Gibt es einen speziellen Formatierungstrick, der dies erreichen kann?

metasoarous
quelle

Antworten:

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

Sie benötigen Coreutils> = 8,25

Ich persönlich bevorzuge dieses:

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
adrianlzt
quelle
5

Es scheint, als gäbe es kein geeignetes Flag ps, daher müssen Sie entweder ein anderes Tool verwenden (ich persönlich bevorzuge htop) oder psein wenig mit der Ausgabe herumspielen. Ich denke du willst dabei bleiben ps. Hier ist ein schmutziges kleines Skript, das ich als Beispiel erstellt habe:

# 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

Speichern Sie es in einer Datei prettyps.sh, machen Sie es beispielsweise ausführbar:

chmod + x prettyps.sh

und wie folgt verwenden:

ps ux | /path/to/prettyps.sh

Die Verwendung dieses Skripts hat den Nachteil, dass der ps-Ausgabe zusätzliche Prozesse hinzugefügt werden, aber es funktioniert trotzdem:

$ ps ux | ./prettyps.sh
USER PID% CPU% MEM VSZ (MB) RSS (MB) TTY STAT STARTZEITBEFEHL
pono 2658 0,0 0,0 358,88 4,29? Sl 02:33 0:00 / usr / bin / gnome-keyring
... Ausgabe abgeschnitten ...
pono 4507 0.0 0.0 19.14 1.81 pts / 1 S + 03:29 0:00 man                   
pono 4518 0.0 0.0 10.55 0.96 pts / 1 S + 03:29 0:00 pager                 
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 

Ich hoffe, dies hilft, einen Weg zu finden, der zu Ihnen passt.

Pono
quelle
0

Requisiten an @adrianlxt! Dies ist mein neuer Alias ​​"pss":

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

Ryan
quelle