Linux ps commandο
The ps command on linux is one of the most basic commands for viewing the processes running on the system. It provides a snapshot of the current processes along with detailed information like user id, cpu usage, memory usage, command name etc.
Note on syntaxο
Note :
ps aux
is not the same asps -aux
. For example-u
is used to show process of that user. Butu
means show detailed information.
BSD style:
ps aux
UNIX/LINUX style:
ps -ef
How to use ps commandο
1. Display all processesο
$ ps ax
$ ps -ef
Use the u
option or -f
option to display detailed information about the processes
$ ps aux
$ ps -ef -f
2. Display process by userο
To filter the processes by the owning user use the -u
option followed by the username. Multiple usernames can be provided separated by a comma.
$ ps -f -u www-data
UID PID PPID C STIME TTY TIME CMD
www-data 1329 1328 0 09:32 ? 00:00:00 nginx: worker process
www-data 1330 1328 0 09:32 ? 00:00:00 nginx: worker process
www-data 1332 1328 0 09:32 ? 00:00:00 nginx: worker process
3. Show process by name or process idο
To search the processes by their name or command use the -C
option followed by the search term.
$ ps -C apache2
PID TTY TIME CMD
2359 ? 00:00:00 apache2
4524 ? 00:00:00 apache2
To display processes by process id, use the -p
option and provides the process ids separated by comma.
$ ps -f -p 3150,7298,6544
4. Sort process by cpu or memory usageο
$ ps aux --sort=-pcpu,+pmem
Display the top 5 processes consuming most of the cpu.
$ ps aux --sort=-pcpu | head -5
5. Display process hierarchy in a tree styleο
$ ps -f --forest -C apache2
UID PID PPID C STIME TTY TIME CMD
root 2359 1 0 09:32 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 4524 2359 0 10:03 ? 00:00:00 \_ /usr/sbin/apache2 -k start
www-data 4525 2359 0 10:03 ? 00:00:00 \_ /usr/sbin/apache2 -k start
6. Display child processes of a parent processο
$ ps -o pid,uname,comm -C apache2
PID USER COMMAND
2359 root apache2
4524 www-data apache2
4525 www-data apache2
The first process that is owned by root is the main apache2 process and all other apache2 processes have been forked out of this main process. The next command lists all child apache2 processes using the pid of the main apache2 process
$ ps --ppid 2359
PID TTY TIME CMD
4524 ? 00:00:00 apache2
4525 ? 00:00:00 apache2
7. Display threads of a processο
The -L
option will display the threads along with the processes. It can be used to display all threads of a particular process or all processes.
$ ps -p 3150 -L
8. Change the columns to displayο
$ ps -e -o pid,uname,pcpu,pmem,comm
It is possible to rename the column labels
$ ps -e -o pid,uname=USERNAME,pcpu=CPU_USAGE,pmem,comm
9. Display elapsed time of processesο
The elapsed time indicates, how long the process has been running for. The column for elapsed time is not shown by default, and has to be brought in using the -o
option
$ ps -e -o pid,comm,etime
10. Turn ps into an realtime process viewerο
As usual, the watch command can be used to turn ps into a realtime process reporter.
$ watch -n 1 'ps -e -o pid,uname,cmd,pmem,pcpu --sort=-pmem,-pcpu | head -15'