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 TIME CMD
4245 pts/7 00:00:00 bash
5314 pts/7 00:00:00 ps
|
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
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
|
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
| `-gnome-session-+-Gnome
| |-ssh-agent
| `-true
|-geyes_applet
|-gkb_applet
|-gnome-name-serv
|-gnome-smproxy
|-gnome-terminal-+-bash---vim
| |-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
|
The -u and -a
options give additional information. For more options and what they
do, refer to the Info pages.
In the next section, we will see how one process can create
another.