Using The ps And top Commands

The Unix commands covered in this section: ps, grep, top 

The basic unit of execution in UNIX (and many other operating systems) is called a process. In the "Redirecting input/output" section of the tutorial, you were asked to think of a process as a program you run from the shell. This is not far from the truth in most cases. What you think of as a program often consists of a single process. Your login shell and all the commands you've used in this tutorial run as single processes. In some cases, however, what you think of as a single program (e.g., a web or database server) actually consists of multiple processes communicating with each other. In this section, you will learn how to list the processes currently running on the system using the ps and top commands. In the next section, you'll learn how to manipulate processes. 

Exercise 1.1 

Use the ps command to see the processes associated with the current shell. 
          % ps
            PID TTY      TIME CMD
          22441 pts/7    0:00 tcsh

Until you've learned how to run processes in the background, the output of ps is not terribly interesting, since there are no other processes besides the shell itself to display. However, by adding some options to ps, we can make things a bit more interesting. The "-e" option tells ps to list all processes running on the system, not just those associated with the current shell. The "-f" option creates a full listing, which includes more information about each process. 

Exercise 1.2 

Use ps -ef to get a full listing of all processes on the system. Since there are generally many processes to be listed, you'll want to pipe the output into a pager, such as more. 

          % ps -ef | more
               UID      PID  PPID  C STIME TTY  TIME CMD
              root          0     0       0   Sep 18 ?       0:17     sched
              root          1     0       0   Sep 18 ?       0:54     /etc/init -
              root          2     0       0   Sep 18 ?       0:00     pageout
              root          3     0       0   Sep 18 ?       6:15    fsflush
              root      418     1       0    Sep 18 ?       0:00    /usr/lib/saf/sac -t 300
            daemon   156    1       0    Sep 18 ?       0:00    /usr/lib/nfs/statd

The ps command under most versions of BSD requires different arguments to produce a full listing. Instead of "ps -ef", you would enter "ps aux". Linux and many versions of UNIX support both the standard UNIX arguments (with a "-") and the BSD-style arguments (without a "-"). The output of ps varies somewhat between UNIX versions, but you will generally see something similar to the output shown above. Table 1.1 shows the meaning of each field displayed in the full listing for ps in the last exercise. 

Table 1.1 

  field       description 
  UID       the user who owns the process 
  PID       the process id, a unique identifier assigned to each process 
  PPID     the parent process id, the process that spawned the current process 
  C           this field is obsolete 
  STIME  the start time for the current process 
  TTY      the controlling terminal for the current process 
  TIME    the amount of CPU time accumulated by the current process 
  CMD     the command used to invoke the process 

In some cases, you may want to restrict the listing to a few processes -- perhaps all processes belonging to a given user, or all occurrences of a certain program. You can use the grep command to do the filtering. It prints lines matching a specified pattern in its input while discarding lines that don't match. 

Exercise 1.3 

Create a pipeline using ps -ef to get a full listing of all processes and grep look for all occurrences of the pine e-mail program. 

            % ps -ef | grep pine
            boris       12089   7171  0  22:27:36 pts/2    0:00 grep pine
            sherman    5183  5178   0  20:14:09 pts/3    0:03 pine
            peabody  25996 25985  0  08:18:04 pts/14   0:01 pine
            natasha   27244 17083  0  17:43:27  pts/15   0:02 pine
            rocky       8009   8879   0  21:09:36 pts/6     0:00 pine 

The top program also lists processes, but adds the ability to sort by various criteria (CPU utilization by default) and provides a continuously updated display. It also gives a useful summary of the status of the system, including memory and CPU utilization. 

Exercise 1.4 

Use top to display the processes using the most CPU time. To exit top when you're done, press 'q'. 

          % top
          load averages:  0.01,  0.03,  0.05   22:46:49
          81 processes:  80 sleeping, 1 on cpu
          CPU states: 99.4% idle,  0.4% user,  0.2% kernel,  0.0% iowait,  0.0% swap
          Memory: 256M real, 27M free, 61M swap in use, 451M swap free

          PID  USERNAME THR PRI NICE  SIZE   RES   STATE   TIME    CPU COMMAND
        13066   boris             1      33    0      1472K  1384K cpu        0:00     0.16% top
           164   root               6       7     0      7952K 4088K sleep     25:32  0.15% automountd
        13072 www              4      24    0       5928K 3288K sleep      0:00  0.09% httpd
         8084  www              4      33    0       7840K 6216K sleep      3:22  0.05% httpd
         7837  www              4      33    0       7840K 6264K sleep      2:54  0.05% httpd

Note that top also displays additional fields not shown by ps, including the scheduling priority and "nice" level.

Have a Unix Problem
Unix Forum - Do you have a UNIX Question?

Unix Books :-
UNIX Programming, Certification, System Administration, Performance Tuning Reference Books

Return to : - Unix System Administration Hints and Tips

(c) www.gotothings.com All material on this site is Copyright.
Every effort is made to ensure the content integrity.  Information used on this site is at your own risk.
All product names are trademarks of their respective companies.
The site www.gotothings.com is in no way affiliated with or endorsed by any company listed at this site.
Any unauthorised copying or mirroring is prohibited.