SHORT LONG DESCRIPTION c cmd simple name of executable C cmdline full command line f flags flags as in long format F field g pgrp process group ID G tpgid controlling tty process group ID j cutime cumulative user time J cstime cumulative system time k utime user time K stime system time m min_flt number of minor page faults M maj_flt number of major page faults n cmin_flt cumulative minor page faults N cmaj_flt cumulative major page faults o session session ID p pid process ID P ppid parent process ID r rss resident set size R resident resident pages s size memory size in kilobytes S share amount of shared pages t tty the minor device number of tty T start_time time process was started U uid user ID number u user user name v vsize total VM size in bytes y priority kernel scheduling priority
You will need to update the /etc/psdatabase file by running /etc/psupdate to get meaningful information from the WCHAN field. This should be done every time you compile a new kernel.
Programs swapped out to disk will be shown without command line arguments, and unless the c option is given, in parentheses.
%CPU shows the cputime/realtime percentage. It will not add up to 100% unless you are lucky. It is time used divided by the time the process has been running.
The SIZE and RSS fields don't count the page tables and the task_struct of a proc; this is at least 12k of memory that is always resident. SIZE is the virtual size of the proc (code+data+stack).
To perform the device number to name mapping ps maintains a file called "/etc/psdevtab" (updated whenever "/dev" becomes newer and permissions allow update). If permissions do not allow update, every invokation of ps requires a stat(2) of every file in the "/dev" directory. If "/dev" changes often on your system you should run ps as root often. ;-) I may add a fallback file under $HOME under force of popular demand.