Processes

At the heart of Unix lies the concept of a process. Understanding this concept will help you keep control of your login session as a user. If you are also a system administrator, the concept is even more important.

A process is an independently running program that has its own set of resources. For instance, we showed in an earlier section how you could direct the output of a program to a file while your shell continued to direct output to your screen. The reason that the shell and the other program can send output to different places is that they are separate processes.

On Unix, the finite resources of the system, like the memory and the disks, are managed by one all-powerful program called the kernel. Everything else on the system is a process.

Thus, before you log in, your terminal is monitored by a getty process. After you log in, the getty process dies (a new one is started by the kernel when you log out) and your terminal is managed by your shell, which is a different process. The shell then creates a new process each time you enter a command. The creation of a new process is called forking because one process splits into two.

If you are using the X Window System, each process starts up one or more windows. Thus, the window in which you are typing commands is owned by an xterm process. That process forks a shell to run within the window. And that shell forks yet more processes as you enter commands.

To see the processes you are running, enter the command ps. Figure 4-4 shows some typical output and what each field means. You may be surprised how many processes you are running, especially if you are using X. One of the processes is the ps command itself, which of course dies as soon as the output is displayed.

Output of ps command

Figure 4-4. Output of ps command

The first field in the ps output is a unique identifier for the process. If you have a runaway process that you can’t get rid of through Ctrl-C or other means, you can kill it by going to a different virtual console or X window and entering:

$ kill 
            process-id

The TTY field shows which terminal the process is running on, if any. (Everything run from a shell uses a terminal, of course, but background daemons don’t have a terminal.)

The STAT field shows what state the process is in. The shell is currently suspended, so this field shows an S. An Emacs editing session is running, but it’s suspended using Ctrl-Z. This is shown by the T in its STAT field. The last process shown is the ps that is generating all this input; its state, of course, is R because it is running.

The TIME field shows how much CPU time the processes have used. Because both bash and Emacs are interactive, they actually don’t use much of the CPU.

You aren’t restricted to seeing your own processes. Look for a minute at all the processes on the system. The a option stands for all processes, while the x option includes processes that have no controlling terminal (such as daemons started at runtime):

$ ps ax | more

Now you can see the daemons that we mentioned in the previous section.

Recent versions of the ps command have a nice additional option. If you are looking for a certain process of which you know the name or at least parts of it, you can use the option -C, followed by the name to see only the processes whose names match the name you specify:

$ ps -C httpd

And here, with a breathtaking view of the entire Unix system at work, we end this chapter (the lines are cut off at column 76; if you want to see the command lines in their full glory, add the option -w to the ps command):

kalle@owl:~ > ps aux
USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   416   64 ?        S    Mar23   0:57 init [3]
root         2  0.0  0.0     0    0 ?        SW   Mar23  30:05 [kflushd]
root         3  0.0  0.0     0    0 ?        SW   Mar23  13:26 [kupdate]
root         4  0.0  0.0     0    0 ?        SW   Mar23  11:39 [kswapd]
root         5  0.0  0.0     0    0 ?        SW<  Mar23   0:00 [mdrecoveryd]
root         9  0.0  0.0     0    0 ?        SW   Mar23   0:00 [khubd]
bin       1512  0.0  0.0  1272    0 ?        SW   Mar23   0:00 [portmap]
root      1530  0.0  0.0  1328  216 ?        S    Mar23   0:17 /sbin/syslogd
root      1534  0.0  0.0  1728  180 ?        S    Mar23   0:03 /sbin/klogd -c 1
root      1560  0.0  0.0  1236    0 ?        SW   Mar23   0:00 [usbmgr]
root      1570  0.0  0.0  1728    0 ?        SW   Mar23   0:00 [nlservd]
at        1578  0.0  0.0  1388  108 ?        S    Mar23   0:00 /usr/sbin/atd
nobody    1585  0.0  0.0  5592   24 ?        S    Mar23   0:00 [in.identd]
nobody    1586  0.0  0.0  5592   24 ?        S    Mar23   0:49 [in.identd]
nobody    1587  0.0  0.0  5592   24 ?        S    Mar23   0:00 [in.identd]
nobody    1588  0.0  0.0  5592   24 ?        S    Mar23   0:00 [in.identd]
root      1618  0.0  0.0  1676   96 ?        S    Mar23   0:42 /usr/sbin/rpc.mou
root      1621  0.0  0.0  1696   92 ?        S    Mar23   0:41 /usr/sbin/rpc.nfs
root      1649  0.0  0.1  2352  340 ?        S    Mar23   0:23 sendmail: accepti
root      1657  0.0  0.1  2156  404 ?        S    Mar23   0:47 /usr/sbin/nmbd -D
root      1664  0.0  0.0  2652  196 ?        S    Mar23   0:00 [smbd]
root      1681  0.0  0.0  1408  164 ?        S    Mar23   0:15 /usr/sbin/cron
root      1689  0.0  0.0  1328   32 ?        S    Mar23   0:00 /usr/sbin/lpd
root      1713  0.0  0.1 11724  352 ?        S    Mar23   0:03 /usr/sbin/nscd
root      1731  0.0  0.0  1280  168 ?        S    Mar23   0:00 /usr/sbin/inetd
root      1795  0.0  0.0  1996    0 tty1     SW   Mar23   0:00 [login]
root      1796  0.0  0.0  1996    0 tty2     SW   Mar23   0:00 [login]
root      1798  0.0  0.0  1228    0 tty4     SW   Mar23   0:00 [mingetty]
root      1799  0.0  0.0  1228    0 tty5     SW   Mar23   0:00 [mingetty]
root      1800  0.0  0.0  1228    0 tty6     SW   Mar23   0:00 [mingetty]
kalle     2302  0.0  0.0  2584    0 tty1     SW   Mar23   0:00 [bash]
root      2309  0.0  0.0  2428    0 tty2     SW   Mar23   0:00 [bash]
root      2356  0.0  0.0  1292   56 ?        S    Mar23  19:32 /usr/sbin/gpm -t 
root      5860  0.0  0.0  2108   88 ?        S    Mar23   0:01 [sshd]
root     21391  0.0  0.0  2004    0 tty3     SW   Mar30   0:00 [login]
kdeuser  21394  0.0  0.0  2548    0 tty3     SW   Mar30   0:00 [bash]
kalle    17613  0.0  0.0  1660    0 ?        SW   Mar31   0:00 [ssh-agent]
kalle    20007  0.0  0.1  2628  512 tty1     S    Apr03   0:00 /bin/bash
kalle    27278  0.0  0.4  2384 1140 tty1     S    Apr22   0:00 sh /usr/X11R6/bin
kalle    27279  0.0  0.2  1552  636 tty1     S    Apr22   0:00 tee /home/kalle/.
kalle    27291  0.0  0.3  2728  824 tty1     S    Apr22   0:00 xinit /home/kalle
root     27292 25.2  7.2 45724 19080 ?       S    Apr22 2531:10 X :0 -auth /home
kalle    27308  0.0  0.4  2376 1124 tty1     S    Apr22   0:00 bash /home/kalle/
kalle    27316  0.0  0.4  2500 1296 tty1     S    Apr22   0:00 bash --login /opt
kalle    27374  0.0  0.4 14048 1212 ?        S    Apr22   0:08 kdeinit: dcopserv
kalle    27376  0.0  0.6 14540 1812 ?        S    Apr22   0:01 kdeinit: klaunche
kalle    27378  0.0  0.7 13964 1852 ?        S    Apr22   5:36 kdeinit: kded    
kalle    27381  0.1  2.3 18564 6252 ?        S    Apr22  12:03 kdeinit: kdesktop
kalle    27388  0.0  0.6 14164 1716 ?        S    Apr22   0:00 kdeinit: kxmlrpcd
kalle    27399  0.1  2.0 15324 5468 ?        S    Apr22  13:10 kdeinit: klipper 
kalle    27401  0.0  1.4 14316 3920 ?        S    Apr22   0:02 kdeinit: khotkeys
kalle    27403  0.0  0.1 13608  296 ?        S    Apr22   0:00 kdeinit: Running.
kalle    27404  0.0  1.6 14516 4204 ?        S    Apr22   0:01 kdeinit: kwrited 
kalle    27406  0.0  0.1  1440  520 pts/0    S    Apr22   0:00 /bin/cat
kalle    27409  0.0  2.1 13680 5664 tty1     S    Apr22   0:06 knotify
kalle    27413  0.0  1.8 10476 4844 tty1     S    Apr22   0:03 ksmserver --resto
kalle    27415  0.3  1.0 15032 2728 ?        S    Apr22  30:35 kdeinit: kwin -se
kalle    27426  0.0  0.9 15496 2436 ?        S    Apr22   0:29 kdeinit: konsole 
kalle    27429  0.0  0.9 15456 2424 ?        S    Apr22   0:03 kdeinit: konsole 
kalle    27430  0.0  0.5  2672 1568 pts/2    S    Apr22   0:00 /bin/bash
kalle    27431  0.0  0.6  2908 1776 pts/1    S    Apr22   0:01 /bin/bash
kalle    27489  0.0  2.1 15616 5648 ?        S    Apr22   0:06 kdeinit: kio_uise
kalle    27492  0.0  1.9 14636 5092 ?        S    Apr22   0:03 kdeinit: kcookiej
kalle    27494  0.0  0.7  9896 1916 ?        S    Apr22   0:05 kdesud
kalle    30812  0.0  1.1 17620 2900 pts/1    S    Apr23   6:01 kicker
kalle    30893  0.0  0.6 15556 1784 ?        S    Apr23   0:22 kdeinit: konsole 
kalle    30894  0.0  0.6  2680 1580 pts/3    S    Apr23   0:00 /bin/bash
kalle    30902  0.0  2.7 13912 7132 pts/3    S    Apr23   0:26 xemacs
kalle    30924  0.0  7.7 36564 20152 ?       S    Apr23   1:29 konqueror -mimety
root      1573  0.0  1.2  4740 3320 ?        S    Apr23   1:07 /usr/sbin/smbd -D
kalle     5812  0.0  0.9 15600 2408 ?        S    Apr24   1:35 kdeinit: konsole 
kalle     5813  0.0  0.6  2836 1720 pts/4    S    Apr24   0:00 /bin/bash
kalle     5820  0.1  5.3 18904 13908 pts/4   S    Apr24  12:13 xemacs
kalle     6100  0.0  0.1  1660  400 ?        S    Apr24   0:00 ssh-agent
kalle    11670  0.0  6.2 26836 16376 ?       S    Apr25   0:16 konqueror -mimety
kalle    13390  0.0  0.6 15596 1812 ?        S    Apr25   0:20 kdeinit: konsole 
kalle    13391  0.0  0.6  2684 1592 pts/5    S    Apr25   0:00 /bin/bash
kalle    15039  0.0  0.1  1656  396 ?        S    Apr25   0:00 ssh-agent
kalle    15337  0.0  0.9 15836 2560 ?        S    Apr25   0:03 designer
kalle    18660  0.0  6.4 24592 16976 pts/5   S    Apr26   4:29 xemacs
kalle    22903  0.2 13.2 42784 34756 ?       S    Apr26  11:59 kmail -caption KM
kalle     8744  0.0  3.3 15336 8712 ?        S    10:09   0:22 ksnapshot
kalle    12077  4.3  4.4 14796 11756 ?       R    20:42   0:34 xemacs
kalle    12130  0.0  1.2 13692 3204 ?        S    20:50   0:00 kdeinit: kio_file
kalle    12132  0.0  1.2 13692 3204 ?        S    20:50   0:00 kdeinit: kio_file
kalle    12152  1.2  0.5  2560 1340 pts/6    S    20:55   0:00 /bin/bash -i
kalle    12162  0.0  0.3  2688  988 pts/6    R    20:56   0:00 ps aux
kalle@owl:~ >

Get Running Linux, Fourth Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.