ps 명령의 CPU 필드를 어떻게 정렬합니까?

ps 명령의 CPU 필드를 어떻게 정렬합니까?

CPU 성능을 가장 많이 사용하는 프로세스를 찾기 위해 작은 명령을 만들려고 합니다.

ps aux > file.txt먼저 then 을 사용합니다 cut -c 16-20 file.txt | sort -n | tail -5.

내가 얻는 결과는 다음과 같습니다.

1.0 
2.7
8.
14.5
14.5 

%CPU그래서 내 질문은 다른 필드와 함께 사용법을 출력하는 방법입니다 .

답변1

정답은 다음과 같습니다.

ps --sort=-pcpu

상위 5위:

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

따라서 정렬을 방해하지 않고 열을 지정할 수 있습니다.

전임자:

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

참고 'ckujau': --sortfrom에서 지원되며 다른 구현에는 이 옵션이 없을 수도 있습니다.psprocps

답변2

해당 필드를 정렬합니다(기본값은 공백에서 공백이 아닌 변환으로 정의됨). 제 경우에는 세 번째 필드입니다.

ps aux | sort -n -k 3

답변3

허용되는 솔루션의 한 가지 성가신 점은 다양한 열의 헤더가 출력에 포함된다는 것입니다. 또 다른 문제는 이 스위치를 사용할 때 실행될 수 있고 출력에서 ​​문제가 될 수 있는 일부 프로그램에 전체 명령줄을 제공 -x한다는 것입니다 .ps

예를 들어

  1. 짜증나는 명령줄

    샘 18174 7.3 3.2 1174896 259756 ? Sl Aug27 132:38 /opt/google/chrome/chrome --type=renderer --lang=en-US --force-fieldtrials=AsyncDns/AsyncDnsB/ForceCompositingMode/disable/InfiniteCache/No/OmniboxHQPReplaceHUPProhibitTrumpingInlineableResult/Standard/OmniboxSearchSuggestTrialStarted2013Q1/7 /OneClickSignIn/Standard/Prerender/PrerenderControl/SendFeedbackLinkLocation/default/Test0PercentDefault/group_01/UMA-Dynamic-Binary-Uniformity-Trial/default/UMA-Session-Randomized-Uniformity-Trial-5-Percent/group_17/UMA-Uniformity-Trial -1%/group_20/UMA-균일성-시행-10-퍼센트/group_07/UMA-균일성-시행-20-퍼센트/기본/UMA-균일성-시행-5-퍼센트/group_04/UMA-균일성-시행-50 - Percent/group_01/ --enable-crash-reporter=4061BD10D0DC127169CE2132BC3FF8EC, Fedora 버전 14(Laughlin) --extension-process --renderer-print-preview --disable-webgl --disable-pepper-3d --disable-gl - 멀티 샘플링 --가속 합성 비활성화 --가속 2D 캔버스 비활성화 --가속 비디오 디코딩 비활성화 --channel=18086.4.1423385819

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

    ps특히 Chrome은 이와 같은 출력을 볼 때 매우 짜증스러울 수 있습니다!

  2. 출력의 헤더

    $ 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
    ...
    

    출력의 7행에서 혼합된 헤더를 볼 수 있습니다.

대안

  1. 제목을 없애라

    ps이러한 열 헤더 표시를 비활성화하는 스위치가 제공됩니다. 사용하기 매우 쉽습니다. 스위치만 추가하면 됩니다 --no-heading.

    $ 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]
    

    또는 다음과 같습니다:

    $ 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. 표시되는 열을 제어합니다.

    이것은 고통스러워 보이지만 ps출력을 캡처하는 스크립트를 작성하는 경우 그다지 나쁘지 않습니다. 이와 같은 명령은 ps aux긴 형식의 열을 실행 파일 이름만 표시하는 짧은 버전 으로 바꾸는 것을 제외하고 의 출력을 모방합니다.COMMAND

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

    열 머리글 없이 함께 사용하면 스크립팅 시 처리하기가 더 쉬워집니다.

    가장 높은 것부터 가장 낮은 것 순으로 CPU 프로세스 백분율 목록:

    $ 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
    

    가장 낮은 것부터 가장 높은 것 순으로 CPU 프로세스 백분율 목록:

    $ 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
    

답변4

macOS에서는 -rBSD 전용 플래그를 사용하여 "현재 CPU 사용량을 기준으로 정렬"할 수 있습니다.

ps -aexro pcpu,cputime,pid,etime,user,args | head

-m"메모리 사용량"을 기준으로 정렬되는 플래그 도 있습니다 ( man ps이것이 맞는지 표시되지 않음).실제 또는 공유 또는 개인 메모리).

관련 정보