Bagaimana mungkin untuk mengurutkan bidang CPU perintah ps?

18

Saya mencoba membuat perintah kecil yang akan menemukan proses yang menggunakan daya CPU paling banyak.

Pertama, saya gunakan ps aux > file.txtlalu cut -c 16-20 file.txt | sort -n | tail -5.

Hasil yang saya dapatkan adalah ini:

1.0 
2.7
8.
14.5
14.5 

Jadi pertanyaan saya adalah bagaimana saya bisa menggunakan keduanya %CPUdan bidang lainnya dikeluarkan bersama?

Spyros Chiotakis
sumber
Kenapa tidak digunakan topsaja?
Joseph R.
@ JosephephR. Saya hanya ingin menggunakan perintah yang baru saya pelajari untuk pemrosesan teks pada 'skrip' kecil ini.
Spyros Chiotakis
1
Nah, jika Anda melakukannya sebagai semacam latihan, maka Anda mungkin ingin melihatnya awk. Setelah itu, ketika Anda siap untuk memindahkan barang "ke produksi", Anda harus menggunakan topdalam mode batch jika cocok untuk kebutuhan Anda.
Joseph R.
1
Anda juga dapat menghilangkan perantara file.txtdengan melakukanps aux|cut -c ...
Joseph R.

Jawaban:

30

Jawaban yang benar adalah:

ps --sort=-pcpu

Untuk top 5:

ps --sort=-pcpu | head -n 6

Jadi, Anda dapat menentukan kolom tanpa mengganggu penyortiran.

Ex:

ps -Ao user,uid,comm,pid,pcpu,tty --sort=-pcpu | head -n 6

Catatan 'ckujau': --sortdidukung oleh psdari procps, implementasi lain mungkin tidak memiliki opsi ini.

Facundo Victor
sumber
Ini memang jawaban yang benar.
Felipe Alvarez
2
Harap dicatat bahwa --sorthanya didukung oleh psdari procps, implementasi lain mungkin tidak memiliki opsi ini.
ckujau
Terima kasih 'ckujau' untuk memperhatikan ini. Saya mengedit jawabannya.
Facundo Victor
11

Urutkan pada bidang yang sesuai (secara default didefinisikan sebagai transisi whitespace ke non-whitespace), dalam kasus saya ini adalah yang ketiga:

ps aux | sort -n -k 3
peterph
sumber
Ini tidak sebagus jawaban @ Facundo, karena jika Anda mengubah kolom yang terlihat, Anda juga harus mengubah kunci pengurutan.
Jonathan Hartley
1
@ Jonathan Hartley ya, tetapi hanya jika Anda psmemiliki --sortpilihan.
peterph
Cukup adil. Dan panjang komentar minimum.
Jonathan Hartley
3

Satu gangguan dengan solusi yang diterima adalah bahwa header untuk kolom yang berbeda akan dimasukkan dalam output. Masalah lainnya adalah ketika Anda menggunakan peralihan -xkeps itu akan memberikan baris perintah penuh untuk beberapa program, yang dapat berjalan dan menjadi gangguan dalam output.

Sebagai contoh

  1. Baris perintah yang mengganggu

    saml 18174 7.3 3.2 1174896 259756? Sl Aug27 132: 38 / opt / google / chrome / chrome --type = renderer --lang = id-AS - force-fieldtrials = AsyncDns / AsyncDnsB / ForceCompositingMode / disable / InfiniteCache / No / OmniboxHQeplaceHUPProhibitTrumpingInlineable / FAQ / OneClickSignIn / Standar / Prerender / PrerenderControl / SendFeedbackLinkLocation / default / Test0PercentDefault / group_01 / UMA-Dynamic-Binary-Uniformity-Trial / default / UMA-Session-Randomized-Uniformity-Trial-5-Persen / group_17 / UMA-Uniformity-Trial -1-Persen / group_20 / UMA-Uniformity-Trial-10-Perscent / group_07 / UMA-Uniformity-Trial-20-Persen / default / UMA-Uniformity-Trial-5-Persen / group_04 / UMA-Uniformity-Trial-50 -Percent / group_01 / --enable-crash-reporter = 4061BD10D0DC127169CE2132BC3FF8EC,

    root 1764 7.7 0.3 163692 28928 tty1 Ss + Aug21 817: 49 / usr / bin / Xorg: 0 -nr -verbose -auth / var / run / gdm / auth-untuk-gdm-fADI0V / database -nolisten tcp vt1

    Chrome khususnya bisa sangat menjengkelkan ketika melihat psoutput seperti ini!

  2. Header dalam output

    $ ps auf | sort -nk 3 | head -20
    ...
    root      1741  0.0  0.0   4140   400 tty5     Ss+  Aug21   0:00 /sbin/mingetty /dev/tty5
    root      1743  0.0  0.0   4140   400 tty6     Ss+  Aug21   0:00 /sbin/mingetty /dev/tty6
    saml     13780  0.0  0.0 115088  4216 pts/13   Ss   Aug27   0:00 bash
    saml     20432  0.0  0.0   6308   400 pts/9    S+   Aug27   0:00  \_ inotifywatch -e CREATE /etc
    saml      8206  0.0  0.0 115296  1108 pts/6    Ss+  Aug21   0:03 bash
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    saml     29352  0.1  0.5 661848 42960 pts/13   Sl+  17:59   0:18  \_ irb
    ...

    Anda bisa melihat tajuk tercampur di baris ke-7 di output.

Alternatif

  1. Menyingkirkan tajuk

    psmenyediakan sakelar untuk menonaktifkan tampilan tajuk kolom ini. Ini cukup mudah digunakan, cukup tambahkan --no-headingsakelar.

    $ ps aux --no-heading | sort -nk 3 | head -10
    68        1481  0.0  0.0  38592  2144 ?        Ssl  Aug21   0:28 hald
    68        1527  0.0  0.0  18016   672 ?        S    Aug21   0:01 /usr/libexec/hald-addon-acpi
    avahi     1333  0.0  0.0  27872  1172 ?        S    Aug21   0:01 avahi-daemon: running [grinchy.local]
    avahi     1334  0.0  0.0  27752    20 ?        S    Aug21   0:00 avahi-daemon: chroot helper
    dbus      1307  0.0  0.0  22716  1900 ?        Ss   Aug21   1:03 dbus-daemon --system
    gdm       1879  0.0  0.0 317220  2740 ?        Sl   Aug21   0:00 /usr/libexec/polkit-gnome-authentication-agent-1
    ntp       3060  0.0  0.0  32600  2152 ?        Ss   20:05   0:00 ntpd -u ntp:ntp -p /var/run/ntpd.pid -g
    root         1  0.0  0.0  19420  1004 ?        Ss   Aug21   0:01 /sbin/init
    root      1006  0.0  0.0      0     0 ?        S    Aug21   0:00 [kvm-irqfd-clean]
    root      1020  0.0  0.0      0     0 ?        S    Aug21   2:02 [kdmflush]

    Atau seperti ini:

    $ ps auf --no-heading | sort -nk 3 |head -10
    root      1735  0.0  0.0   4140   400 tty2     Ss+  Aug21   0:00 /sbin/mingetty /dev/tty2
    root      1737  0.0  0.0   4140   400 tty3     Ss+  Aug21   0:00 /sbin/mingetty /dev/tty3
    root      1739  0.0  0.0   4140   400 tty4     Ss+  Aug21   0:00 /sbin/mingetty /dev/tty4
    root      1741  0.0  0.0   4140   400 tty5     Ss+  Aug21   0:00 /sbin/mingetty /dev/tty5
    root      1743  0.0  0.0   4140   400 tty6     Ss+  Aug21   0:00 /sbin/mingetty /dev/tty6
    saml     13780  0.0  0.0 115088  4216 pts/13   Ss   Aug27   0:00 bash
    saml     20432  0.0  0.0   6308   400 pts/9    S+   Aug27   0:00  \_ inotifywatch -e CREATE /etc
    saml      2098  0.0  0.0 115508  3148 pts/9    Ss   Aug22   0:05 bash
    saml     27134  0.0  0.0 115496  6768 pts/18   Ss   Aug27   0:02 bash
    saml      3248  0.0  0.0 115076  1024 pts/0    Ss+  Aug21   0:00 bash
  2. Kendalikan kolom yang ditampilkan.

    Ini bisa terasa menyakitkan, tetapi jika Anda membuat skrip untuk menangkap psoutput, itu tidak terlalu buruk. Perintah seperti ini akan meniru output ps aux, kecuali menukar bentuk COMMANDkolom yang lebih panjang dengan versi yang lebih pendek yang hanya menunjukkan nama yang dapat dieksekusi.

    $ ps ax --no-headings -o user,pid,%cpu,%mem,vsz,sgi_rss,tname,stat,start_time,time,ucmd

    Menyatukan semuanya tanpa tajuk kolom akan lebih mudah ditangani saat membuat skrip.

    Daftar proses CPU tertinggi hingga terendah:

    $ ps ax --no-headings -o user,pid,%cpu,%mem,vsz,sgi_rss,tname,stat,start_time,time,ucmd |sort -nrk 3|head -10
    saml     18086  114  6.4 1418852 515236 ?     Sl   Aug27 1-10:53:31 chrome
    saml     18536 14.7  4.1 1276240 328636 ?     Sl   Aug27 04:29:21 chrome
    saml     18558 12.2  3.4 1209712 278228 ?     Sl   Aug27 03:44:22 chrome
    saml     18543 10.9  3.8 1238132 308824 ?     Rl   Aug27 03:20:18 chrome
    root      1764  7.7  0.4 170220 35276 tty1    Rs+  Aug21 13:40:16 Xorg
    saml     18174  7.3  3.0 1167728 241728 ?     Sl   Aug27 02:14:25 chrome
    saml     18314  3.6  1.4 1049020 119308 ?     Sl   Aug27 01:06:19 chrome
    saml     18528  2.7  3.1 1178368 251212 ?     Sl   Aug27 00:50:55 chrome
    saml      2389  2.0  0.1 330632 8480 ?        Sl   Aug21 03:37:13 compiz
    saml     18208  1.7  1.3 1081132 108828 ?     Sl   Aug27 00:32:02 chrome

    Daftar proses CPU terendah ke tertinggi:

    $ ps ax --no-headings -o user,pid,%cpu,%mem,vsz,sgi_rss,tname,stat,start_time,time,ucmd |sort -nk 3|tail -10
    saml     18208  1.7  1.3 1082156 108348 ?     Sl   Aug27 00:32:03 chrome
    saml      2389  2.0  0.1 330632 8492 ?        Sl   Aug21 03:37:15 compiz
    saml     18528  2.7  3.1 1181440 250856 ?     Sl   Aug27 00:50:58 chrome
    saml     18314  3.6  1.5 1050044 119828 ?     Sl   Aug27 01:06:25 chrome
    saml     18174  7.3  3.0 1167728 242068 ?     Sl   Aug27 02:14:32 chrome
    root      1764  7.7  0.3 163688 28716 tty1    Ss+  Aug21 13:40:26 Xorg
    saml     18543 10.9  3.8 1235060 305464 ?     Sl   Aug27 03:20:32 chrome
    saml     18558 12.2  3.5 1214832 283560 ?     Sl   Aug27 03:44:34 chrome
    saml     18536 14.7  3.9 1267024 314400 ?     Sl   Aug27 04:29:39 chrome
    saml     18086  114  6.4 1412992 514856 ?     Sl   Aug27 1-10:55:28 chrome
slm
sumber