< Previous | Contents | Next >
4.1.4. Displaying process information
The ps command is one of the tools for visualizing processes. This command has several options which can be combined to display different process attributes.
With no options specified, ps only gives information about the current shell and eventual processes:
theo:~> ps
PID TTY
4245 pts/7
5314 pts/7
TIME CMD
00:00:00 bash
00:00:00 ps
theo:~> ps
PID TTY
4245 pts/7
5314 pts/7
Since this does not give enough information - generally, at least a hundred processes are running on your system - we will usually select particular processes out of the list of all processes, using the grep command in a pipe, see Section 5.1.2.1, as in this line, which will select and display all processes owned by a particular user:
ps -ef | grep username
This example shows all processes with a process name of bash, the most common login shell on Linux systems:
theo:> ps auxw | grep bash
brenda | 31970 | 0.0 | 0.3 | 6080 | 1556 | tty2 | S | Feb23 | 0:00 | -bash |
root | 32043 | 0.0 | 0.3 | 6112 | 1600 | tty4 | S | Feb23 | 0:00 | -bash |
theo | 32581 | 0.0 | 0.3 | 6384 | 1864 | pts/1 | S | Feb23 | 0:00 | bash |
theo | 32616 | 0.0 | 0.3 | 6396 | 1896 | pts/2 | S | Feb23 | 0:00 | bash |
theo | 32629 | 0.0 | 0.3 | 6380 | 1856 | pts/3 | S | Feb23 | 0:00 | bash |
theo | 2214 | 0.0 | 0.3 | 6412 | 1944 | pts/5 | S | 16:18 | 0:02 | bash |
theo | 4245 | 0.0 | 0.3 | 6392 | 1888 | pts/7 | S | 17:26 | 0:00 | bash |
theo | 5427 | 0.0 | 0.1 | 3720 | 548 | pts/7 | S | 19:22 | 0:00 | grep bash |
In these cases, the grep command finding lines containing the string bash is often displayed as well on systems that have a lot of idletime. If you don't want this to happen, use the pgrep command.
Bash shells are a special case: this process list also shows which ones are login shells (where you have to give your username and password, such as when you log in in textmode or do a remote login, as opposed to
non-login shells, started up for instance by clicking a terminal window icon). Such login shells are preceded with a dash (-).
|?
We will explain about the | operator in the next chapter, see Chapter 5.
More info can be found the usual way: ps --help or man ps. GNU ps supports different styles of option formats; the above examples don't contain errors.
Note that ps only gives a momentary state of the active processes, it is a one-time recording. The top program displays a more precise view by updating the results given by ps (with a bunch of options) once every five seconds, generating a new list of the processes causing the heaviest load periodically, meanwhile integrating more information about the swap space in use and the state of the CPU, from the proc file system:
12:40pm up 9 days, 6:00, 4 users, load average: 0.21, 0.11, 0.03
89 processes: 86 sleeping, 3 running, 0 zombie, 0 stopped CPU states: 2.5% user, 1.7% system, 0.0% nice, 95.6% idle
12:40pm up 9 days, 6:00, 4 users, load average: 0.21, 0.11, 0.03
89 processes: 86 sleeping, 3 running, 0 zombie, 0 stopped CPU states: 2.5% user, 1.7% system, 0.0% nice, 95.6% idle
Mem: 255120K av, 239412K used, 15708K free, 756K shrd, 22620K buff Swap: 1050176K av, 76428K used, 973748K free, 82756K cached
PID | USER | PRI | NI | SIZE | RSS | SHARE | STAT | %CPU | %MEM | TIME | COMMAND |
5005 | root | 14 | 0 | 91572 | 15M | 11580 | R | 1.9 | 6.0 | 7:53 | X |
19599 | jeff | 14 | 0 | 1024 | 1024 | 796 | R | 1.1 | 0.4 | 0:01 | top |
19100 | jeff | 9 | 0 | 5288 | 4948 | 3888 | R | 0.5 | 1.9 | 0:24 | gnome-terminal |
19328 | jeff | 9 | 0 | 37884 | 36M | 14724 | S | 0.5 | 14.8 | 1:30 | mozilla-bin |
1 | root | 8 | 0 | 516 | 472 | 464 | S | 0.0 | 0.1 | 0:06 | init |
2 | root | 9 | 0 | 0 | 0 | 0 | SW | 0.0 | 0.0 | 0:02 | keventd |
3 | root | 9 | 0 | 0 | 0 | 0 | SW | 0.0 | 0.0 | 0:00 | kapm-idled |
4 | root | 19 | 19 | 0 | 0 | 0 | SWN | 0.0 | 0.0 | 0:00 | ksoftirqd_CPU0 |
5 | root | 9 | 0 | 0 | 0 | 0 | SW | 0.0 | 0.0 | 0:33 | kswapd |
6 | root | 9 | 0 | 0 | 0 | 0 | SW | 0.0 | 0.0 | 0:00 | kreclaimd |
7 | root | 9 | 0 | 0 | 0 | 0 | SW | 0.0 | 0.0 | 0:00 | bdflush |
8 | root | 9 | 0 | 0 | 0 | 0 | SW | 0.0 | 0.0 | 0:05 | kupdated |
9 root -1-20 0 0 0 SW< 0.0 0.0 0:00 mdrecoveryd | |||||||||||
13 | root | 9 | 0 | 0 | 0 | 0 | SW | 0.0 | 0.0 | 0:01 | kjournald |
89 | root | 9 | 0 | 0 | 0 | 0 | SW | 0.0 | 0.0 | 0:00 | khubd |
219 | root | 9 | 0 | 0 | 0 | 0 | SW | 0.0 | 0.0 | 0:00 | kjournald |
220 | root | 9 | 0 | 0 | 0 | 0 | SW | 0.0 | 0.0 | 0:00 | kjournald |
The first line of top contains the same information displayed by the uptime command:
jeff:~> uptime
3:30pm, up 12 days, 23:29, 6 users, load average: 0.01, 0.02, 0.00
jeff:~> uptime
3:30pm, up 12 days, 23:29, 6 users, load average: 0.01, 0.02, 0.00
The data for these programs is stored among others in /var/run/utmp (information about currently connected users) and in the virtual file system /proc, for example /proc/loadavg (average load information). There are all sorts of graphical applications to view this data, such as the Gnome System Monitor and lavaps. Over at FreshMeat and SourceForge you will find tens of applications that centralize this information along with other server data and logs from multiple servers on one (web) server, allowing monitoring of the entire IT infrastructure from one workstation.
The relations between processes can be visualized using the pstree command:
sophie:~> pstree
init-+-amd
|-apmd
|-2*[artsd]
|-atd
|-crond
|-deskguide_apple
|-eth0
|-gdm---gdm-+-X
sophie:~> pstree
init-+-amd
|-apmd
|-2*[artsd]
|-atd
|-crond
|-deskguide_apple
|-eth0
|-gdm---gdm-+-X
|
|
|
`-gnome-session-+-Gnome
|-ssh-agent
`-true
|
|
|
|-geyes_applet
|-gkb_applet
|-gnome-name-serv
|-gnome-smproxy
|-gnome-terminal-+-bash---vim
|-geyes_applet
|-gkb_applet
|-gnome-name-serv
|-gnome-smproxy
|-gnome-terminal-+-bash---vim
|
|
|
|
|
|-gpm
|-gweather
|-kapm-idled
|-bash
|-bash---pstree
|-bash---ssh
|-bash---mozilla-bin---mozilla-bin---3*[mozilla-bin]
`-gnome-pty-helper
|
|
|
|
|
|-gpm
|-gweather
|-kapm-idled
|-3*[kdeinit]
|-keventd
|-khubd
|-5*[kjournald]
|-klogd
|-lockd---rpciod
|-lpd
|-mdrecoveryd
|-6*[mingetty]
|-8*[nfsd]
|-nscd---nscd---5*[nscd]
|-ntpd
|-3*[oafd]
|-panel
|-portmap
|-rhnsd
|-rpc.mountd
|-rpc.rquotad
|-rpc.statd
|-sawfish
|-screenshooter_a
|-sendmail
|-sshd---sshd---bash---su---bash
|-syslogd
|-tasklist_applet
|-vmnet-bridge
|-xfs
`-xinetd-ipv6
|-3*[kdeinit]
|-keventd
|-khubd
|-5*[kjournald]
|-klogd
|-lockd---rpciod
|-lpd
|-mdrecoveryd
|-6*[mingetty]
|-8*[nfsd]
|-nscd---nscd---5*[nscd]
|-ntpd
|-3*[oafd]
|-panel
|-portmap
|-rhnsd
|-rpc.mountd
|-rpc.rquotad
|-rpc.statd
|-sawfish
|-screenshooter_a
|-sendmail
|-sshd---sshd---bash---su---bash
|-syslogd
|-tasklist_applet
|-vmnet-bridge
|-xfs
`-xinetd-ipv6