So now you know how to switch back and forth between several processes that
you've started from the command line. And you also know that there are
lots of processes running all the time. So how do you list all of these
programs? Well, you make use of the ps(1) command. This
command has a lot of options, so we'll only cover the most important ones here.
For a complete listing, see the man page for ps. Man pages
are covered in-depth in the section called man in Chapter 2.
Simply typing ps will get you a listing of the programs
running on your terminal. Many times, that will be a very short listing:
$ ps
PID TTY TIME CMD
7923 ttyp0 00:00:00 bash
8059 ttyp0 00:00:00 ps |
Even though this is not a lot of processes, the information is very typical.
You'll get the same columns using regular ps no matter how
many processes are running. So what does it all mean?
Well, the PID is the process ID. All running processes are given a unique
identifier. On 2.2.x kernels, this process ID can be anywhere between 1 and
32767. Each process is assigned the next free PID. When a process quits
(or is killed, as you will see in the next section), it gives up its PID.
When the max PID is reached, the next free one will wrap back around to the
lowest free one. This will most likely change in the upcoming 2.4 kernel
series and the introduction of 32-bit PIDs.
The TTY column indicated which terminal the process is running on. Doing
a plain ps will only list all the programs running on the current terminal,
so all the processes give the same information in the TTY column. As you
can see, both processes listed are running on ttyp0. This indicates that
they are either running remotely or from an X terminal of some variety.
The TIME column indicated how much CPU time the process has been running.
This is different from the actual amount of time that a process runs.
Remember that Linux is a multitasking operating system. There are many
processes running all the time, and these processes each get a small portion
of the processor's time. So, the TIME column should show much less time for
each process than it actually takes to run. If you see more than several
minutes in the TIME column, it could mean that something is wrong.
Finally, the CMD column shows what the program actually is. It only lists
the base name of the program, not any command line options or similar
information. To get that information, you'll need to use one of the
many options to ps. We'll discuss that shortly.
You can get a complete listing of the processes running on your system
using the right combination of options. This will probably result in a
long listing of processes (fifty-five on my laptop as I write this
sentence), so I'll abbreviate the output:
$ ps -ax
PID TTY STAT TIME COMMAND
1 ? S 0:03 init [3]
2 ? SW 0:13 [kflushd]
3 ? SW 0:14 [kupdate]
4 ? SW 0:00 [kpiod]
5 ? SW 0:17 [kswapd]
11 ? S 0:00 /sbin/kerneld
30 ? SW 0:01 [cardmgr]
50 ? S 0:00 /sbin/rpc.portmap
54 ? S 0:00 /usr/sbin/syslogd
57 ? S 0:00 /usr/sbin/klogd -c 3
59 ? S 0:00 /usr/sbin/inetd
61 ? S 0:04 /usr/local/sbin/sshd
63 ? S 0:00 /usr/sbin/rpc.mountd
65 ? S 0:00 /usr/sbin/rpc.nfsd
67 ? S 0:00 /usr/sbin/crond -l10
69 ? S 0:00 /usr/sbin/atd -b 15 -l 1
77 ? S 0:00 /usr/sbin/apmd
79 ? S 0:01 gpm -m /dev/mouse -t ps2
94 ? S 0:00 /usr/sbin/automount /auto file /etc/auto.misc
106 tty1 S 0:08 -bash
108 tty3 SW 0:00 [agetty]
109 tty4 SW 0:00 [agetty]
110 tty5 SW 0:00 [agetty]
111 tty6 SW 0:00 [agetty]
[output cut] |
Most of these processes are started at boot time on most systems. I've
made a few modifications to my system, so your mileage will most likely
vary. However, you will see most of these processes on your system too.
As you can see, these options display command line options to the running
processes. It also brings up a few more columns and some other interesting
output.
First, you'll notice that most of these processes are listed as running
on tty “?”. Those are processes that were started from a
no-longer active terminal. Therefore, they are no longer attaached to any
particular terminal.
Second, there is a new column: STAT. It shows the status of the process.
S stands for sleeping: the process is waiting for something to happen. Z
stands for a zombied process. A zombied processes is one whose parent
has died, leaving the child processes behind. This is not a good thing.
If you want to see even more information about the running processes, try
this out:
$ ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 344 80 ? S Mar02 0:03 init [3]
root 2 0.0 0.0 0 0 ? SW Mar02 0:13 [kflushd]
root 3 0.0 0.0 0 0 ? SW Mar02 0:14 [kupdate]
root 4 0.0 0.0 0 0 ? SW Mar02 0:00 [kpiod]
root 5 0.0 0.0 0 0 ? SW Mar02 0:17 [kswapd]
root 11 0.0 0.0 1044 44 ? S Mar02 0:00 /sbin/kerneld
root 30 0.0 0.0 1160 0 ? SW Mar02 0:01 [cardmgr]
bin 50 0.0 0.0 1076 120 ? S Mar02 0:00 /sbin/rpc.port
root 54 0.0 0.1 1360 192 ? S Mar02 0:00 /usr/sbin/sysl
root 57 0.0 0.1 1276 152 ? S Mar02 0:00 /usr/sbin/klog
root 59 0.0 0.0 1332 60 ? S Mar02 0:00 /usr/sbin/inet
root 61 0.0 0.2 1540 312 ? S Mar02 0:04 /usr/local/sbi
root 63 0.0 0.0 1796 72 ? S Mar02 0:00 /usr/sbin/rpc.
root 65 0.0 0.0 1812 68 ? S Mar02 0:00 /usr/sbin/rpc.
root 67 0.0 0.2 1172 260 ? S Mar02 0:00 /usr/sbin/cron
root 77 0.0 0.2 1048 316 ? S Mar02 0:00 /usr/sbin/apmd
root 79 0.0 0.1 1100 152 ? S Mar02 0:01 gpm
root 94 0.0 0.2 1396 280 ? S Mar02 0:00 /usr/sbin/auto
chris 106 0.0 0.5 1820 680 tty1 S Mar02 0:08 -bash
root 108 0.0 0.0 1048 0 tty3 SW Mar02 0:00 [agetty]
root 109 0.0 0.0 1048 0 tty4 SW Mar02 0:00 [agetty]
root 110 0.0 0.0 1048 0 tty5 SW Mar02 0:00 [agetty]
root 111 0.0 0.0 1048 0 tty6 SW Mar02 0:00 [agetty]
[output cut] |
That's a whole lot of information. Basically, it adds information including
what user started the process, how much of the system resources the
process is using (the %CPU, %MEM, VSZ, and RSS columns), and on what date
the process was started. Obviously, that's a lot of information that could
come in handy for a system administrator. It also brings up another point:
the information now goes off the edge of the screen so that you cannot
see it all. Well, the “-w” option will do that.
It's not terribly pretty, but it does the job. You've now got the complete
listings for each process. There's even more information that you can
display about each process. Check out the very in-depth man page for
ps. However, the options shown are the most popular ones
and will be the ones you need to use the most often.