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.
Here I list most used options in examples:
list all processes (ps -e, ps -ef, ps -eF, ps -ely, ps ax, ps axu)
UID PID PPID C STIME TTY TIME CMD root 1 0 0 Jul25 ? 00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 root 2 0 0 Jul25 ? 00:00:00 [kthreadd] root 3 2 0 Jul25 ? 00:00:00 [ksoftirqd/0] root 5 2 0 Jul25 ? 00:00:00 [kworker/0:0H] root 7 2 0 Jul25 ? 00:00:01 [rcu_sched] root 8 2 0 Jul25 ? 00:00:00 [rcu_bh] root 9 2 0 Jul25 ? 00:00:00 [migration/0] Where -e, list all processes -l, long listing -f, full format listing -F, extra full format On BSD machine, to get all processes, run ps ax ps axu are
List processes by user
# ps -lf -u ganglia F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 5 S ganglia 1566 1 0 80 0 - 36728 ep_pol Jul23 ? 00:00:11 /usr/sbin/gmond
The command above shows user ganglia's processes, long and full format output
List the processes based on PIDs or PPIDs (ps -p, ps –ppid)
Want to check a pid info, run
# ps -fl -p 1 F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 4 S root 1 0 0 80 0 - 4840 poll_s Jul23 ? 00:00:02 /sbin/init
Want to list all child processes of one pid, run
# ps -fl --ppid 1 F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 5 S root 1436 1 0 80 0 - 63855 poll_s Jul23 ? 00:00:02 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5 5 S root 1448 1 0 80 0 - 2704 hrtime Jul23 ? 00:00:35 irqbalance 5 S rpc 1462 1 0 80 0 - 4743 poll_s Jul23 ? 00:00:00 rpcbind 5 S dbus 1475 1 0 80 0 - 5350 poll_s Jul23 ? 00:00:00 dbus-daemon --system
The '--ppid' option is very useful for some applications that have lots of child/sub processes.
List the process by process name
# ps -lf -C postmaster F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 1 S postgres 2013 31977 0 80 0 - 171406 sk_wai Jul25 ? 00:01:31 postgres: srmdcache dcache 127.0.0.1(37345) idle 1 S postgres 11728 31977 0 80 0 - 171591 poll_s 00:58 ? 00:00:00 postgres: autovacuum worker process dcache
List the process by a forest tree
# ps -lf -u postgres --forest F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 4 S postgres 6841 6840 0 80 0 - 2869 n_tty_ Jul16 pts/2 00:00:00 -bash 0 S postgres 31977 1 0 80 0 - 170537 poll_s Jul21 ? 00:00:24 /usr/pgsql-9.2/bin/postmaster -p 5432 -D /var/lib/pgsql/9.2/data 1 S postgres 31979 31977 0 80 0 - 20770 poll_s Jul21 ? 00:00:06 \_ postgres: logger process 1 S postgres 31981 31977 0 80 0 - 170829 poll_s Jul21 ? 00:04:51 \_ postgres: checkpointer process 1 S postgres 31982 31977 0 80 0 - 170602 poll_s Jul21 ? 00:02:07 \_ postgres: writer process 1 S postgres 31983 31977 0 80 0 - 170602 poll_s Jul21 ? 00:00:23 \_ postgres: wal writer process 1 S postgres 31984 31977 0 80 0 - 171048 poll_s Jul21 ? 00:00:38 \_ postgres: autovacuum launcher process 1 S postgres 31985 31977 0 80 0 - 20952 poll_s Jul21 ? 00:08:53 \_ postgres: stats collector process
Similar to the command above, you can also combine --forest option with others, for example
#ps -lf -C postmaster --forest #ps -lf -p <pid> --forest #ps -elf --forest
List a process threads
Some time you want to check a process' thread status, run
# ps -lf -C java -L F S UID PID PPID LWP C NLWP PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 0 S root 17949 17946 17949 0 322 80 0 - 1207154 futex_ Jul25 pts/1 00:00:00 /usr/bin/java -server -Xmx2048m -XX:MaxDirectMemorySize=512m -Dsun.net.inetaddr.ttl=1800 -Dorg.globus.tcp.port.range=20000,25000 -Djava.net.preferIPv4Stack=true -Dorg.dcache.dcap.port=0 -Dorg.dcache.net.tcp.portran ge=33115:33145 -Dorg.globus.jglobus.delegation.cache.lifetime=30000 -Dorg.globus.jglobus.crl.cache.lifetime=60000 -Djava.security.krb5.realm=EXAMPLE.ORG -Djava.security.krb5.kdc=localhost -Djavax.security.auth.useSubjectCredsOnly=false -Djava.security.auth.login.config=/etc/dcache/jgss.conf -XX:+Hea pDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/dcache/dCacheDomain-oom.hprof -javaagent:/usr/share/dcache/classes/spring-instrument-3.2.2.RELEASE.jar -Djava.awt.headless=true -DwantLog4jSetup=n -Ddcache.home=/usr/share/dcache -Ddcache.paths.defaults=/usr/share/dcache/defaults org.dcache.boot.Boot Loader start dCacheDomain 1 S root 17949 17946 17953 0 322 80 0 - 1207154 futex_ Jul25 pts/1 00:00:01 /usr/bin/java -server -Xmx2048m -XX:MaxDirectMemorySize=512m -Dsun.net.inetaddr.ttl=1800 -Dorg.globus.tcp.port.range=20000,25000 -Djava.net.preferIPv4Stack=true -Dorg.dcache.dcap.port=0 -Dorg.dcache.net.tcp.portran ge=33115:33145 -Dorg.globus.jglobus.delegation.cache.lifetime=30000 -Dorg.globus.jglobus.crl.cache.lifetime=60000 -Djava.security.krb5.realm=EXAMPLE.ORG -Djava.security.krb5.kdc=localhost -Djavax.security.auth.useSubjectCredsOnly=false -Djava.security.auth.login.config=/etc/dcache/jgss.conf -XX:+Hea pDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/dcache/dCacheDomain-oom.hprof -javaagent:/usr/share/dcache/classes/spring-instrument-3.2.2.RELEASE.jar -Djava.awt.headless=true -DwantLog4jSetup=n -Ddcache.home=/usr/share/dcache -Ddcache.paths.defaults=/usr/share/dcache/defaults org.dcache.boot.Boot Loader start dCacheDomain
Specify the output format
-o option ps -C postmaster -o pid,tid,pcpu,state,nlwp,args
8.Sort option, --sort
$ ps jax --sort=uid,-ppid,+pid PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND 3143 3147 3143 3143 ? -1 S 0 0:00 (sd-pam) 1048 1076 1076 1076 tty1 1076 Rs+ 0 7:12 /usr/bin/Xorg :0 -background none -verbose -auth /run/gdm/auth-for-gdm-00pQFt/database -seat seat0 1048 1739 888 888 ? -1 Sl 0 0:00 gdm-session-worker [pam/gdm-password] 954 1406 1406 954 ? -1 S 0 0:00 /sbin/dhclient -d -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-p4p1.pid -lf /var/lib/Netwo 888 1048 888 888 ? -1 Sl 0 0:00 /usr/libexec/gdm-simple-slave --display-id /org/gnome/DisplayManager/Displays/_0 838 839 838 838 ? -1 S< 0 0:00 /usr/sbin/sedispatch 828 838 838 838 ? -1 S<sl 0 0:00 /sbin/audispd
Where
a Lift the BSD-style "only yourself" restriction j BSD job control format x Lift the BSD-style "must have a tty" restriction --sort spec specify sorting order. Sorting syntax is [+|-]key[,[+|-]key[,...]] Choose a multi-letter key from the STANDARD FORMAT SPECIFIERS section. The "+" is optional since default direction is increasing numerical or lexicographic order. Identical to k.