Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

How to show top five CPU consuming processes with ps?

share|improve this question

6 Answers 6

up vote 15 down vote accepted

Why use ps when you can do it easily with the top command?

If you must use ps, try this:

ps aux | sort -kr 3,3 | head -n 6

If you want something that's truly 'top'esq with constant updates, use watch

watch "ps aux | sort -kr 3,3 | head -n 6"
share|improve this answer
if u have to use ps, try with ps aux, and then pipe it with some way of sort or something. You will find the way. –  Boban P. May 28 '11 at 18:23
"You will find the way" isn't a particularly helpful answer :) –  Michael Mrozek May 28 '11 at 18:40
I agree :) will post solution with ps after the finale :) –  Boban P. May 28 '11 at 18:51
ps aux | sort -k 3,3 | tail -n 5 ;-) –  PlanasB May 28 '11 at 19:01
sort -kr 3,3 gave me invalid count at start of 'r'. Had to change to sort -rk 3,3 (GNU sort 8.13) –  rzymek Dec 14 '13 at 19:51

Depending on your needs you may find this a little more readable:

ps -eo pcpu,pid,user,args --no-headers| sort -t. -nk1,2 -k4,4 -r |head -n 5

sample output:

 1.3     4 root     [ksoftirqd/0]
 1.1     9 root     [ksoftirqd/1]
 1.0 17606 nobody   /usr/sbin/gmetad
 1.0    13 root     [ksoftirqd/2]
 0.3 17401 nobody   /usr/sbin/gmond

(the fields are %CPU,PID,USER,COMMAND)

share|improve this answer
This doesn't sort xx.x and x.x digits correctly. I get a set of processes in this cpu usage order: %CPU PID USER COMMAND 6.9 3295 gearond /usr/lib/firefox/plugin-container /usr/lib/adobe-flashplugin/libflashplayer.so -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 3216 true plugin 3.7 13665 gearond gnome-terminal 2.8 13672 gearond bash 2.6 1444 root /usr/bin/X :0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch -background none 12.5 3216 gearond /usr/lib/firefox/firefox –  Dennis Mar 15 at 16:02
right you are @Dennis. Good catch. I've updated my answer to correctly handle this. –  Ryan Horrisberger Mar 16 at 20:28

I don't think ps is what you are looking for. Have you looked at the output from top?

If you have GNU-Top, try using it's batch mode to spit out a process list sorted by cpu usage and using head/tail to get the top 5 lines (the first 8 are headers):

top -b -n 1 | head -n 12  | tail -n 5

The BSD top seems to behave differently and doesn't have a non-interactive mode, so use one of the other ps based solutions.

share|improve this answer
In OS X, is top -o cpu -n 5 a way of achieving the same thing. Does anyone know? My top is different to your top. –  boehj May 29 '11 at 4:00
You're the one with the different top so you would be in a position to say. My top doesn't have -o and -n sets the number of times it refreshes the display before quitting. –  Caleb May 29 '11 at 5:28
Fair enough. I'll get on a Linux box this afternoon and take a look. My top doesn't seem to have a batch mode, which is quite limiting. There must be some way of piping top into other commands. I'll do some research. –  boehj May 29 '11 at 5:45
I mentioned the batch mode switch in my answer but it's actually unnecessary for my top because it auto-detects being part of a pipe instead of an interactive session. Did you try just piping it without that? –  Caleb May 29 '11 at 5:56
I can't figure it because if I do top -o cpu | head -n 12 | tail -n 5 the top process is started but it seems it's being run in the background as there's nothing printed in the terminal. –  boehj May 29 '11 at 6:22

The correct answer is:

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

So you can specify columns without interfering with sorting.


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

Note that current versions of ps have sorting ability within them, based on field codes (given in the ps man page). The field code for processor usage is "c". You can use --sort c at the end of a ps command e.g. ps aux --sort c

This will put the process using the most cpu at the bottom of the list. Reverse order of the list by adding a minus to the field code used to sort e.g. ps aux --sort -c

share|improve this answer

top on Mac OS X has a logging mode option in the form of top -l numberOfSamples (which seems to be the equivalent to the batch mode of GNU top). It is necessary, though, to have at least two samples because "the first sample displayed will have an invalid %CPU displayed for each process, as it is calculated using the delta between samples" (man 1 top).

# examples
top -o cpu -l 2 -n 5 | tail -n 6
top -o cpu -l 2 -n 5 -stats pid,command,cpu | tail -n 6
top -o cpu -l 2 -n 5 -stats pid,command,cpu -U $(logname) | tail -n 6
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.