ps 명령의 CPU 필드를 정렬하는 방법은 무엇입니까?


18

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

먼저, ps aux > file.txt그리고 나서를 사용 cut -c 16-20 file.txt | sort -n | tail -5합니다.

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

1.0 
2.7
8.
14.5
14.5 

그래서 내 질문은 %CPU사용법과 다른 필드를 함께 출력하는 방법은 무엇입니까?


top대신 사용 하지 않습니까?
Joseph R.

@JosephR. 이 작은 '스크립트'에서 텍스트 처리를 위해 방금 배운 명령을 사용하고 싶습니다.
Spyros Chiotakis

1
글쎄, 당신이 일종의 운동으로 그것을하고 있다면, 당신은 볼 수 있습니다 awk. 그런 다음, "제작"으로 옮길 준비가 top되면 요구 사항에 적합한 경우 배치 모드로 사용해야합니다.
Joseph R.

1
다음 file.txt을 수행 하여 중간체 를 제거 할 수도 있습니다.ps aux|cut -c ...
Joseph R.

답변:


30

정답은 다음과 같습니다.

ps --sort=-pcpu

상위 5 개 :

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

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

전의:

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

'ckujau':의 --sort지원은 psfrom에서 지원하며 procps다른 구현에는이 옵션이 없을 수 있습니다.


이것은 실제로 정답입니다.
Felipe Alvarez 5

2
참고 --sort만 지원됩니다 ps로부터는 procps, 다른 구현이 옵션이 없을 수 있습니다.
ckujau 2016 년

이것을 지적 해 주셔서 감사합니다. 나는 대답을 편집했다.
Facundo Victor

11

적절한 필드를 기준으로 정렬하십시오 (기본적으로 공백에서 공백이 아닌 공백으로 정의 됨). 제 경우에는 세 번째입니다.

ps aux | sort -n -k 3

보이는 열을 변경하면 정렬 키도 변경해야하기 때문에 @Facundo의 대답만큼 좋지 않습니다.
Jonathan Hartley

1
@JonathanHartley 예, 그러나 옵션 ps이있는 경우에만 가능합니다 --sort.
peterph December

그럴 수 있지. 그리고 최소 주석 길이입니다.
Jonathan Hartley

3

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

예를 들어

  1. 성가신 명령 줄

    saml 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 / OmniboxSearchSuggestTrialStart2013 / 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- 퍼센트 / 그룹 _20 / UMA- 균일 시험 -10- 퍼센트 / 그룹 _07 / UMA- 균일 시험 -20 퍼센트 / 기본 / UMA- 균일 시험 --5 퍼센트 / 그룹 _04 / UMA- 균일 시험 -퍼센트 / 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-for-gdm-fADI0V / database -nolisten tcp vt1

    크롬은 특히 ps이와 같은 출력을 볼 때 상당히 성 가실 수 있습니다 !

  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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.