diff --git a/contrib/top/ADVERTISEMENT b/contrib/top/ADVERTISEMENT deleted file mode 100644 index b8fc68c1b979..000000000000 --- a/contrib/top/ADVERTISEMENT +++ /dev/null @@ -1,28 +0,0 @@ - William LeFebvre - Group sys Consulting - wnl@groupsys.com - +1-770-813-3224 - - -William LeFebvre is available for consulting and teaching engagements -through the company Group sys Consulting. William's specialties are: - - Unix system administration issues - Local area network design - Design of safe connections to the Internet - Domain Name Service - Threaded programming with pthreads - Netscape Server API plugins - INN news server configuration - SunOS to Solaris migration - Troubleshooting - - -Although located in the Atlanta metropolitan area, William can easily -travel to any location in the United States and Canada. Trips to -other countries can be arranged as well. - -If you are interested in having William work for your organization, -contact him at +1-770-813-3224 or via the address "wnl@groupsys.com". -You may also wish to visit the Group sys web page at www.groupsys.com. - diff --git a/contrib/top/Changes b/contrib/top/Changes deleted file mode 100644 index 214dcbc61756..000000000000 --- a/contrib/top/Changes +++ /dev/null @@ -1,632 +0,0 @@ -Thu Mar 30 2000 - wnl (3.5beta12) - Updated modules: m_aix41.c, m_aix43.c, m_mtxinu.c, m_sco5.c, - and m_ultrix4.c. - Included m_irixsgi.c from some source that's been floating around - SGI. Don't yet know how it compares to m_irix62. - -Fri Mar 10 2000 - wnl (3.5beta11) - top.c: avoid potential loop if stdout gets closed, use macro - for p_active to avoid collision with system macros. - m_sunos5: widened some fields to accomodate 5.8. - m_decosf1: added ordering support - m_irix62_64: provides 64-bit module based on m_irix62. - m_irix62: skip bogus files in /proc directory - m_svr42MP and m_svr5: complete replacement with updated copies - m_mtxinu: complete replacement with updated copies - m_aix43: new module for 4.3 - getans: replaced with a Bourne shell script - -Mon Mar 6 2000 - wnl (3.5beta10) - m_sunos5.c: workaround for curses bug: ensure that TERMINFO has - a value. - -Fri Jan 15 1999 - wnl (3.5beta10) - top.c: now check return code from read to avoid looping on eof. - top.c: delay of 0 now only valid for root. - decosf1.c: patches from Rainer Orth should fix most of the - problems with this module (including the display of certain - processes and runtime errors). - sunos5.c: Rainer insisted on putting the slash back in the - state field ("run/4") and widened the field to accomodate it. - aix.c: widened PID field for 6-digit pids (shortened NICE field) - module macosx added, thanks to Andrew Townley. - -Fri Dec 18 1998 - wnl (3.5beta9) - Configure checks status of "make" and complains if it fails. - -Thu Dec 17 1998 - wnl (3.5beta9) - Added module sco5 from Mike Hopkirk. - Added module netbsd132 from moto kawasaki. - -Sun Oct 25 1998 - wnl (3.5beta9) - Added Casper's patches for sunos5 for the following: - produce same results as swap -s (5.5 and higher), - don't use system_pages kstat when /dev/kmem can be opened, - skip . and .. when reading /proc, replace use of SOLARIS24 - with OSREV. - -Fri Sep 11 1998 - wnl (3.5beta9) - Added workaround to getans for the absence of $< in SCO Unix. - -Wed Jul 1 1998 - wnl (3.5beta9) - Changed structure member "errno" to "errnum" in commands.c. - Replaced hpux10 module with one from John Haxby. - -Fri Apr 17 1998 - wnl (3.5beta8) - Moved definition of _KMEMUSER earlier in m_sunos5.c. This should - fix the compilation problem with gnu 2.7.2.3, obviating the need - for the fixinc.svr4 patch, but hopefully will not affect anything - else. - Added -DORDER to m_sunos4mp.c - -Tue Nov 18 1997 - wnl (3.5beta7) - Added gcc 2.7.2.3 patch for fixinc.svr4 and changed INSTALL and - FAQ to refer to it. - Added NetBSD HP9000 fix. Hopefully it doesn't break other - NetBSD platforms. - -Fri Oct 24 1997 - wnl (3.5beta7) - Modified m_dcosx.c to change uses of procdir to xprocdir, avoiding - a name clash with an include file (Bryn Parrott) - -Sat Oct 11 1997 - wnl (3.5beta6) - Incorporated Casper's patches for Solaris 2.6 and for the multi- - processor bug ("kstat finds too many cpus"). - -Sun Jan 20 1996 - wnl (3.5beta5) - Fixed Casper's m_sunos5 module: there was a poor interaction with - his use of OSREV and SunOS 5.5.1. - -Fri Dec 20 1996 - wnl (3.5beta4) - Replaced m_sunos5 with a reworked version by Casper Dik. This one - should work under 2.6 and may not require that top be run setuid - to root under 2.5 or 2.6. This also fixed a bug in m_sunos5 that - was introduced in beta3. - Fixed calculation of OSREV in Configure. - -Wed Nov 20 1996 - wnl (3.5beta3) - Incorporated contributed fixes to: bsdos2, irix62, freebsd20, - ultrix4, sunos5. Changed calculation of swap area in sunos5 (now - uses swapctl). sunos5 now understands idled processors. Changed - Configure to determine os revision using uname (when available) - and adding it to machine.c compiliation in Makefile as -DOSREV. - Changed calls to "exit" in modules to use "quit" instead. - -Oct 20 1996 - wnl (3.5beta3) - Removed "time" from list of ordering choices: there's no easy way - to get cpu time for all processes (it's in the u area). - -Fri Oct 18 1996 - wnl (3.5beta3) - hpux10 and hpux9: using a better means for determining when a - process is idle. - decosf1 now includes utils.h. - -Fri Sep 13 1996 - wnl (3.5beta2) - Fixed Configure to build Make.desc in such a way that doesn't - require a long argument to sed. - -Thu Sep 12 1996 - wnl (3.5beta2) - Fixed bug in display.c that affected empty cpustate names. - Created hpux1010 module - a variant of hpux10 that does not use - struct proc or struct user (suitable for HP/UX 10.10). - -Wed Sep 11 1996 - wnl (3.5beta2) - Changes to sunos5 module: Removed WCPU column since it is meaningless - on a SVR4-based system. Added THR column to show number of threads - for each process. This was not straightforward: the information is - not stored in prpsinfo but rather in prstatus. - -Tue Sep 10 1996 - wnl (3.5beta1) - Added patches for sunos4mp to provide order support. - Added irix62 module. - Changed prime.c to include stdio.h for printf prototype. - Added conditional code to os.h and utils.c to handle systems - where sys_errlist is defined in stdio.h (such as NetBSD). - -Mon Sep 09 1996 - wnl (3.5beta1) - Removed tar and shar rules from Makefile.X -- don't need them anymore. - Added -v option to display version number. Updated man page. - -Thu Aug 29 1996 - wnl (3.4) - Replaced modules (from Tim Pugh): next 32, next40. - Fixed bug in username.c: hashing negative uids. - -Thu Aug 22 1996 - wnl (3.4beta3) - Patched modules: ultrix4, sunos4, sunos5, utek, decosf1, irix5. - Added modules: next40, next32. - Fixed procstates update bug in display.c. - Fixed divide by zero bug in utils.c. - Fixed bad number in layout.h - Minor fixes to Configure. - Complete overhaul of FAQ. - -Tue Feb 13 1996 - wnl (3.4beta3) - Added convex module from Warren Vosper (originally written by - William Jones). - -Tue Feb 13 1996 - wnl (3.4beta2) - Fixed format_k in utils.c to calculate K and M values correctly. - Added check for gigabyte values ('G'). Changed sumamry_format - in display.c to use format_k where appropriate. - Changed creation of distribution tar file to place everything in - a top level directory. - -Tue Jan 30 1996 - wnl (3.4beta2) - Added m_aix41 module. Added new tag type to module comments: - TERMCAP, which defined the library to use for a termcap library. - If no TERMCAP tag is found in the module's initial comment, then - Configure will default to "-ltermcap". AIX needs this since it - put all the termcap routines in libcurses(!) - - Added m_bsdos2 (found lingering in my mailbox). - Updated m_svr4 to include support for NCR multiprocessors. - Fixed small bug in utils.c - -Thu Jan 25 1996 - wnl (3.4beta1) - Fixed m_sunos5 invocation of gettimeofday to include "NULL" as - second argument. This provides compatability with the Posix- - compliant template provided with SunOS 5.5, but doesn't hurt - previous versions since they do bother with a template for that - function. - - Made changes (recommended by net users) to hpux10, ultrix4, - netbsd10, aux3 (replaced aux31). Added module for linux. - -Fri Oct 10 1995 - wnl (3.4beta1) - Added user-contributed modules for SCO Unix, IRIX 5, HP/UX 10, - Pyramid DC/OSX. Changed Configure so that it runs in environments - whose c-shells have no 'eval'(!). Added support for multiple sort - ordering methods via the -o switch. This option requires support - from the machine dependent module: such support was added to - sunos5 (thus sunos54) and sunos4. - - display.c: Changed CPU states display line to shorten the leading - tag if the data won't fit in the current width. Fixed a divide-by- - zero bug that affected ultrasparc servers (and potentially other - systems). - - m_sunos5.c: Now asks the system for the correct pagesize rather than - assuming it is 4K. - -Thu Mar 2 1995 - wnl (3.3 RELEASE) - Added module netbsd10 and renamed netbsd to netbsd08. Changed - Configure so that it does not use an initial default module name. - Made other compatability fixes to Configure. Added comments to - decosf1 concerning optimizer bug. Other documentation changes. - Added use of "prime.c" to Configure script. - -Tue Feb 7 1995 - wnl (3.3beta6) - Still one more beta.... - Fixes for sunos5 2.4 gcc core dump (it was an alignment problem). - Fixed and improvements for decosf1 (including use of format_k - for proper SIZE column formatting). Added modules freebsd20 and - ncr3000. - -Thu Feb 2 1995 - wnl (3.3beta5) - One more beta.... - Fixed a few bugs in the sunos5 port pertaining to casting and - very large memory counts. Added "ifndef HAVE_GETOPT" to getopt.c - to provide for conditional compilation of the getopt function. - Those systems that have getopt in libc can add -DHAVE_GETOPT to - the CFLAGS line in the module to prevent the function from being - compiled. Added sunos54 module to accomodate SunOS 5.4 - peculiarities. Added module for aux3.1. - -Wed Jan 4 1995 - wnl (3.3beta4) - This is really taking too long......sigh. - Fixed SIGWINCH handling once and for all. It now remembers the - number of processes you want displayed even thru window resizes. - Fixed buffer conflict in utils.c (itoa and itoa7). - Lots of small improvements to the various modules were made over - the past month: too numberous to list here. SunOS 5 module made - more secure thru use of seteuid calls (other SVR4 modules should - be modified similarly). One final MP fix to sunos5, too. Module - for decosf1 was modified to accomodate V3.0. - -Mon Apr 18 1994 - wnl (3.3beta3) - I think I finally got a sunos5 module that will work on MP - machines. Fixed cpu states figure in osmp41a so that - percentages never exceed 100%. Added shell script "install" - since Unix vendors can't seem to make up their minds on what - options they want to use for the one that comes with the OS. - Added netbsd modules from Christos. Fixed lots of other little - things over the past few months that I have long since forgotten. - -Wed Dec 15 1993 - wnl (3.3beta2) - Added module patches from various users: hpux9, sunos5. - Fixed bug with batch mode (screen_width wasn't getting set). - Changes to accomodate 64 bit machines. - Fixed some bugs in command parsing ("renice 19 " did something - unexpected). - -Mon Aug 30 1993 - wnl (3.3beta) - Added lots of little patches from various users. - Added routines to utils.c for intelligent formatting of kilobytes - and time. These are intended to be used in the modules when - formatting a process line. Added code to "summary_format" in - display.c to do intelligent formatting of memory quantities. - Redid display.c to allow for varying line widths and dynamic - reallocation of the screen buffer. - Added a SIGWINCH handler to top.c! - Added a constant, MAX_COLS, to top.h which defines the absolute - widest line we will ever allow. Changed allocations of "char fmt" - in all machine modules to use this constant rather than an abitrary - number. - -Fri Aug 13 1993 - wnl (3.3) - Changed return value definition of time-related functions in top.c, - display.c, and m_ultrix4.c to time_t (stuart@coral.cs.jcu.edu.au). - Fixed bug in display.c: line_update when start != 0. - -Wed Aug 4 1993 - wnl (3.2 release) - Changes to Configure from Paul Vixie. Added modules for hpux9 and - bsd386. - -Tue Jul 13 1993 - wnl (3.1 release) - More small changes and minor bug fixes. Brought bsd44 up to date - and added a module for svr4.2. Changed shar packaging to use Rich - Salz's cshar stuff. - -Wed Jul 7 1993 - wnl (3.1BETA) - More changes and bug fixes to Configure. Applied some other - minor bug fixes and suggestions from the beta testers. Added - the "metatop" shell script and the "installmeta" rule to the - Makefile to make handling multiple machine models and OS versions - easier. Added INSTALL and FAQ files. - -Tue May 18 1993 - wnl (3.1BETA) - Changed Configure to be compatible with most SVR4 environments - (differing output from "ls -lg"). Also changed Configure, - Makefile.X, etc., to look for module files in the subdirectory - "machine" (thanks to Christos Zoulas). - -Tue Apr 20 1993 - wnl (3.1BETA) - Changed both occurences of "ls -1" in Configure to "ls". This - SHOULD produce the same result, and has the advantage that it - doesn't produce an error on a system 5 machine. Integrated other - changes recommended in the first round of beta testing. - -Wed Mar 10 1993 - wnl (3.1BETA) - MAJOR CHANGE: I have added a required function to all machine - dependent modules, called proc_owner. It takes a pid as an argument - and returns the uid of the process's owner. Such capability is - necessary for top to run securely as a set-uid program, something - that is needed for SVR4 implementations to read /proc. I have - retrofitted all modules except dgux with this function, but was - not able to test most of them. Top should now run securely as - a setuid program. Added 386bsd and sunos5 modules. Added sunos4mp - module for MP Suns. - -Sat Feb 20 1993 - wnl (3.1ALPHA) - Modified top.c and commands.c to compile correctly on System V - derived Unixes (especially SVR4), but in a way that doesn't rely - on an oracle-like declaration (that is, I don't use "ifdef SYSV"). - Fixed some bugs in "Configure" and "getans". Added inspection of - env variable "TOP" for options, and made -I default to showing - idle processes. Added "u" command to change username restriction - on the fly. Created shell script "suntop" for poor multi-version - SunOS folks (like myself). - -Wed Jun 3 1992 - wnl (3.0) - "max_topn" wasn't being used everywhere it was supposed to be - in top.c. Many cosmetic changes, including copyright notices in - all the .c files. Version number is now handled by version.c and - reflects the current patchlevel (which is initially set to 0). - Changed Configure and Makefile to allow configurable variables for - certain commands: shell, cc, awk, install. Updated README and - Porting. Ready to release to the world! - -Mon May 18 1992 - wnl (2.9BETA) - Added modules provided by Christos Zoulas. Replaced screen.c - with one modified by Christos and that will appropriately select - and handle the sgtty, termio, or termios system. Integrated many - other changes recommended by Christos. Fixed (I hope) the "-b" - batch mode display bug. Had to change loadavg to load_avg to avoid - a conflict with 4.4BSD. - -Mon Apr 27 1992 - wnl (2.8BETA) - Added modules provided by Daniel Trinkle. Added patchlevel.h, - but the patch level is not yet reflected in the version number. - Cleaned up m_sunos4.c a little. - -Wed Apr 22 1992 - wnl (2.8BETA) - Major internal reorganization. All of the system dependent stuff - is now really and truly separated from everything else. The - system dependent functions are contained in a separate .c file - called a "module". The Configure script knows how to find and - set up these modules, but the human installer still needs to tell - Configure which module to use (no automagic determination of - machine type---sorry). Added -U option to specify one user's - processes, but there is no corresponding command...yet. Other - changes and improvements too numerous to mention here. Currently - there are only two modules: sunos4 and umax. But after this beta - release is sent around, I expect more to be written. I just hope - that the machine-dependent abstractions don't need to change in - the process. - -Thu Mar 26 1992 - wnl (2.7BETA) - Beta release with minimal architecture support. Updated README - and added a first cut at a Porting guide. Added ioctl TIOCGWINSZ - code from top2.5+ (courtesy of David MacKenzie). I didn't even - try porting the Ultrix support since I don't have access to an - Ultrix machine. - -Fri Oct 11 1991 - wnl (2.6) - This version was not widely released. It contained many changes. - Here are the major ones: - - Put in Vixie's idle process hack. - - Enhanced type field in new_message to handle delayed messages. - - Changed u_process to automatically adjust for varying lines of - output. Management of screenbuf should now be completely contained - in display.c. Removed now extraneous code from CMD_number[12] - portion of command switch in top.c. This was the stuff that dealt - with zeroing out lines in screenbuf. - - Finally made it all work correctly on a 386i. Problems I had to - overcome: kvm_nlist doesn't return 0 on success as advertised (it - returns 1 instead); the results of a kvm_nlist are different - (n_type can be zero even for a symbol that exists). - - Serious rearrangement for processor dependent stuff. All nlists - are now in separate files with the suffix ".nlist". Most machine - specific code is in "machine.c" surrounded by appropriate ifdefs--- - the goal is to eventually have all machine specific code in this - file. Managed to find a way to detect SunOS 4.x at compile-time: - this is contained in the include file "sun.h". Completely changed - the memory display line for SunOS 4.x---it now displays a far - more appropriate report. - - Created the shell script "Configure" to aid in the configuration - step. - - Fixed a bug in init_termcap: it will now tolerate an environment - which does not have TERM defined (thanks to Sam Horrocks for - pointing this out). - -Tue Aug 9 1988 - wnl (2.5) - Added changes to make top work under version 4.0 of the Sun - operating system. Changes were provided by Scott Alexander of the - University of Pennsylvania. Thanks! Compile with "-Dsunos4" to - get them. Virtual memory statistics are not readily accessible - under 4.0, so they don't show up in the output. - -Thu Jul 31 1987 - wnl (2.4) - Fixed a problem with the 4.0 Pyramid code. The label "cp_time" - doesn't exist in the 4.0 kernel anymore. I think the code Carl - sent me wants "percpu" instead. That is what I am using and it - appears to work. 375 code is still untested (at least by me). - Also picked a great deal of lint out of the source. Lint now only - complains about a very few nitpicky things (there are far too many - calls to "printf" to put a "(void)" in front of!), at least under - SunOS. - -Tue Jul 28 1987 - wnl (2.4a) - Added changes for a Symmetrics Computer Systems s/375 machine. - Changes were provided by Paul Vixie. Thanks! According to Mr. - Vixie: "These changes were not made at, by, or for SCS proper. - SCS would probably be interested in them, but so far only the - users' group has them. They were made in February, 1987, to - version 2.1 of the program, by Paul Vixie - (dual!ptsfa!vixie!paul@ucbvax.Berkeley.EDU)." His changes were - integrated into version 2.3 to make version 2.4. - - The SCS peculiarities are summarized in Changes.scs. - -Tue Jun 9 1987 - wnl (2.3 for real) - Changed the includes for the extra code Carl sent me to only - compile on Version 4.0 Pyramid machines. This makes top still - compilable on pre-4.0 Pyramids. Specifically, this code is only - compiled when both "pyr" and "CPUFOUND" are defined. - -Wed Jun 3 1987 - wnl (2.3 with Pyramid additions) - It's been a month and I still haven't done anything about - distributing this version. However, Carl Gutekunst from Pyramid - has sent me some extra patches for some of the Pyramid code. I - just added those and will make them part of 2.3. This fixes the - following Pyramid problems: adds the inclusion of , - uses the correct size for getting the kernel value _ccpu (this bug - affected the Vax version as well), sums the elements of the percpu - array to calculate a cp_time value (for OSx 4.0). - -Fri May 1 1987 - wnl (2.3) - I have finally finished all the changes for better support of - oddbal terminals. Added the low-level routine "clear_eol" which - makes handling terminals without "ce" easy: it uses spaces - instead. All direct uses of "clear_line" outside of screen.c have - been changed to use this primitive. A terminal with "os" is now - handled in such that all situations that need overwriting are - completely avoided (including several commands). This required - some changes to the way commands are translated into action (in - "top.c"). Made several important changes to display.c to prevent - overflowing of any of the fields. Specifically, more than 99 - total processes and a cpu state that reaches 100%. Had to make a - small change to two casts in top.c, because the Sun 3.2 compiler - was giving warnings on them. Added the "-q" option which lets - root run top at a nice of -20 (in case he thinks he really needs it). - -Tue Dec 30 1986 - wnl (2.2) - I think I fixed a bug reported by Julian Onions at Nottingham. - Occasionally, top will core dump when the sprintf in either - i_process or u_process overflows due to an exceptionally - unrealistic time value. I think it highly unlikely that top can - get a bad proc structure (although I suppose it is possible), but - the process time is read from the user structure, and that can - sometimes be part garbage. So, "get_ucpu" checks the value it - returns to make sure its formatted form will not overflow the - sprintf. If this doesn't fix the bug, then more drastic measures - will be necessary. I plan to make this version the official - "top 2.2". [[ This version was never distributed very widely. ]] - -Tue Dec 2 1986 - wnl (2.2c) - Added to top.c the notion of a "failed command". When a command - produces a message (on the message line), an update does not - follow it. Before, the message was written and a new display was - shown---purposefully not overwriting the message. But the - improvements to handle overstriking terminals and terminals - without "ce" clear the screen before every display, which would - erase the message. Now, the message is displayed and top waits - another full time interval before updating the display. This - works much better all around. - -Mon Nov 24 1986 - wnl (2.2b) - Created a new file, utils.c, and made appropriate changes to - Makefile. This new file holds all utility functions that can and - may be used by more than one "module". Improved i_memory and - u_memory (display.c) so that screen updates for the values - displayed are only changed when necessary. Also made the line - look better: the last fixes made for a rather ugly display. - Added the locally defined constant "LoadMax" and added code to - top.c to send the cursor home after a space command is entered if - the load average is higher than "LoadMax". This provides visual - feedback on loaded systems. - -Mon Nov 3 1986 - wnl (2.2a) - Widened the format for memory usage so that it can display 5 - digits. This makes that line look a little ugly---maybe I'll fix - that later. Screen handling now understands "os" and a missing - "ce". It treats them identically: clear the screen between each - display. Screen handling code now uses "cd" when appropriate - (i.e.: when user has shortened the screen). Made i_loadave clear - then screen and took out most of the explicit calls to "clear" in - top.c. This method is cleaner, especially in conjunction with - "os" handling. Added preprocessor variable "RANDOM_PW" for - systems that access the passwd file randomly (Sun's yp and 4.3). - With "RANDOM_PW" set, "getpwuid" is used instead of "getpwnam", - but uid->username mappings are still hashed internally (because - that is still faster than going to disk). - -Mon Oct 6 1986 - wnl (2.1) - A bug with the kill command was pointed out by "dciem!tim"--- - specifying a signal by name did not work correctly. This bug has - been fixed with a simple change to commands.c. Another bug made - the cpu state percentages incorrect the first time they were - displayed. This bug has also been fixed (changed top.c). - -Thu Sep 4 1986 - wnl (2.0, at last) - This is the version that will (hopefully) get released to the - world as top 2.0. - Added the "r" and "k" commands for renice and kill, respectively. - This required adding a way to handle system call errors, and the - addition of the "e" command. Help screen and manual page were - changed to reflect this change. Changed all "#ifdef SUN" directives - to "#ifdef sun", and changed all "#ifdef PYRAMID" directives to - "#ifdef pyr". As much as I hate those choices of preprocessor - names (they too easily conflict with real variable names), it does - make automatic compilation possible---people don't have to change - the Makefile anymore for specific machines. The manual page was - changed to automatically incorporate the defaults as set in the - Makefile (including an infinite value for TOPN) and the way the - manual page is generated by the Makefile was changed to make - maintenance of this information automatic. - -Mon Jul 28 1986 - wnl (still pre 2.0) - Real close now. I put in a new definition for the macro "pagetok" - that does an explicit shift of a constant expression involving - PGSHIFT. Appropriate checks are made if PGSHIFT is to small. - "pagetok" is now used exclusively everywhere to convert kernel - clicks to kilobytes. I added a full blown interactive mode with - the ability to change some of the runtime parameters (how many to - display, time delay, etc.) while top is running. I also - incorporated a few ideas from the net: control characters in the - command name are replaced with '?'; the '-S' option makes the - swapper and pager visible; options have been added to control the - number of displays produced (this makes it easier to make - performance snapshots with top). I have also added the notion of - "infinite" values for number of processes and number of displays. - I fixed a long-standing bug in the uid to username mapping code - that was only aggravated on the pyramids: it was an ill-defined - expression (akin to i = i++). I tweaked the proc_compar routine - for qsort slightly so that stopped processes were more likely to - show up. Manual page was updated to reflect all changes - noticeable to the user. - -Tue Jul 1 1986 - wnl (pre 2.0 -- 1.9999?) - In the process of major revamping on the way to version 2.0. - I have completely done away with curses by adding my own screen - management routines in a separate file (screen.c). The rationale - for this is that top knows a whole lot more about what is and is - not redundant on the screen and can compare simple integer values - where curses would have to compare strings. This has turned out - to be a very big win speed-wise. The proc_compar routine for - sorting has been rewritten to include several more keys. I - decided this was necessary when I noticed that the "top" process - itself kept disappearing off the top 10 list on a Sun-3. All the - processes had the same percentage (0%) and the sort wasn't really - doing anything worthwhile. I changed the expression that computes - memory usage to use the ctob macro instead of just assuming that - pages were 512 bytes. More work still needs to be done before - this version is usable. I changed options-processing to use - getopt and added appropriate incantations to the Makefile. - -Wed Feb 20 1985 - wnl (still 1.8) - Put in the ifdef FOUR_ONE statements to make top still compilable - on a 4.1 system. Apparently, there are some users out there that - need this functionality. Oh well. I don't guarantee any of it, - since I can't test it. Made appropriate changes to README and - final installation related changes to Makefile. - -Sat Feb 2 1985 - wnl (1.8) - Removed all the ifdef FOUR_TWO statements and made "top" into a - 4.2 only program. If someone really wants to still run it on 4.1, - then they can do all the work. We don't have a 4.1 machine - anymore, so I don't even know if the thing still works under 4.1. - Cleaned up the Makefile and the README. Added installation rules - to the Makefile, as requested by several sites. Fixed a very - obscure divide-by-zero bug. Added a second "key" to the qsort - comparison function (proc_compar) so that comparisons are based on - cpu ticks if the percentages are equal (provided by Jonathon - Feiber at Sun). - -Tue Dec 11 1984 - wnl (1.7) - Added the virtual and real memory status line to the header area - (provided by Jonathon Feiber at Sun) - -Tue Nov 20 1984 - wnl (1.6) - Added an "exit" if sbrk's fail. Added changes from Jonathon - Feiber at Sun: ifdef SUN to make top work on Suns (they don't use - doubles in the proc structure), register declarations, check for - getting a user structure that has disappeared since the proc array - was read (it used to die, now it just shows the process as swapped). - -Tue Nov 13 1984 - wnl (1.5) - If the number of displayable processes ("active_procs") was less - than the number of requested processes ("topn"), top would - segmentation fault. This bug has been fixed. Thanks to Prentiss - Riddle at ut-sally for pointing out the existence of this bug. - -Tue Oct 23 1984 - wnl (1.4) - Finally fixed the hash table bug that caused processes owned by - root to sometimes appear with either no name or a different name - that had UID 0 (such as "operator"). Removed all the ifdef DEBUG - blocks to make top ready for distribution to the real world. - -Sun Apr 8 1984 - wnl (still 1.3) - Made some slight changes to the display format. It now looks more - aesthetically pleasing. Added some preprocessor constants so that - the two defaults (number of processes and seconds of delay) easier - to change. - -Thu Apr 5 1984 - wnl (1.3) - Changed the order in which things are done at initialization time. - This way, if an error occurs before starting the main loop, curses - will never get started. Also changed other error handlers so that - endwin() is called before any flavor of exit. Specifying a number - of processes that is more than the screen can handle is no longer - fatal. It displays a warning message and pretends the user - specified the maximum for the screen. Finally cured all the TSTP - blues (well, almost all). I removed my TSTP handler and convinced - the system to always use the one that curses sets up. Turns out - that "sleep" was stepping all over it during a pause. So, I don't - use sleep anymore. The only problem that remains with it now is - redrawing the old display before updating it after a pause. - -Tue Apr 3 1984 - wnl (from 1.0 to 1.2) - I changed the format of the TIME column from just "seconds" to - "minutes:seconds". I also made pausing work correctly. Screen - redraws with an up to date display. For compatibility with 4.2, I - changed the name of the "zero" function to "bzero". The makefile - has been altered to handle versions for 4.1 and 4.2, and README - has been updated to reflect these recent changes. diff --git a/contrib/top/Configure b/contrib/top/Configure deleted file mode 100755 index e760044043dd..000000000000 --- a/contrib/top/Configure +++ /dev/null @@ -1,565 +0,0 @@ -#!/bin/csh -f -# -# Configuration script for top. -# -# Use with version 3.0 and higher. -# -set PRIME = "/usr/games/primes" -set vars = (module LoadMax topn NominalTopn delay owner group mode random \ - TableSize bindir mandir manext mansty \ - Cmdshell Cmdcc Cmdawk Cmdinstall cdefs) -set fastrack = 0 -set yesno = (no yes) - -onintr byebye - -# make sure that getans is there and ready -if (! -e getans) then - echo 'This package is not complete. The shell file "getans" is missing.' - exit 10 -endif -chmod +x getans - -if ($#argv > 0) then -# fast track configuration - set fastrack = 1 -else -cat <<'EOF' -Configuration for top, version 3.5 - -One moment.... -'EOF' -endif - -# collect file names and module names -ls machine/m_*.c >$$.f -ls machine/m_*.man >$$.m -sed -e 's@^machine/m_@@' -e 's/.c$//' $$.f >$$.n - -# build Make.desc -sed -e 's@\.c@.desc\\@' $$.f | sed -e '$s/\\//' >$$.a -sed -e "/^DESCS/r $$.a" Make.desc.X >Make.desc - -# build desc files and SYNOPSIS as needed -make -f Make.desc >/dev/null -if ($status != 0) then - echo "Unable to build the synopsis." - echo 'Make sure the command "make" is on your path and try' - echo 'running Configure again.' - exit 1 -endif - -if (-e .defaults) then - echo "" - echo "Reading configuration from last time..." - source .defaults - set nodefaults = 0 - if ($fastrack == 1) then - set module = $1 - endif -else - if ($fastrack == 1) then - echo "No previous configuration was found." - set fastrack = 0 - set module = $1 - else - set module = "" - endif - set LoadMax = 5.0 - set topn = 15 - set NominalTopn = 18 - set delay = 5 - set TableSize = 0 - set bindir = /usr/local/bin - set mandir = /usr/man/manl - set manext = l - set mansty = man - set nodefaults = 1 - set Cmdshell = /bin/sh - set Cmdawk = awk - set Cmdinstall = ./install - set Cmdcc = cc - set cdefs = -O -endif -echo "" - -if ($fastrack == 1) then - grep -s $module $$.n >/dev/null - if ($status != 0) then - echo "$module is not recognized. To see a list of available modules" - echo 'run "Configure" with no arguments.' - rm -f $$.[fmna] - exit 1 - endif - set random1 = `expr $random + 1` - cat </dev/null -if ($status != 0) then - echo "That is not a recognized module name." - goto getmod -endif - -# display a full description -sed -e '1,/DESCRIPTION:/d' -e '/^$/,$d' machine/m_${module}.desc - -# verify it -echo "" -./getans "Is this what you want to use?" yesno 1 .$$ -if (`cat .$$` == 0) then - goto getmod -endif -endif - -cat <<'EOF' - -First we need to find out a little bit about the executables needed to -compile top. - -'EOF' -./getans "What is the full path name for the Bourne shell" file "$Cmdshell" .$$ -set Cmdshell = `cat .$$` - -cat <<'EOF' - -Please supply the name of the appropriate command. It need not be a -full path name, but the named command does need to exist somewhere on -the current path. - -'EOF' -./getans "AWK Interpreter" path "$Cmdawk" .$$ -set Cmdawk = `cat .$$` -./getans "C Compiler" path "$Cmdcc" .$$ -set Cmdcc = `cat .$$` - -cat <<'EOF' - -The installer command needs to understand Berkeley-esque arguments: -"-o" for owner, "-g" for group, and "-m" for mode. A shell script -called "install" is distributed with top and is suitable for use by -top. You can specify a different program here if you like, or use -the shell script (the default). - -'EOF' -./getans "Installer" path "$Cmdinstall" .$$ -set Cmdinstall = `cat .$$` - -cat < 1) then - set rand = 1 - endif -else - ypwhich >&/dev/null - if ($status == 0 || -e /etc/passwd.dir || -e /etc/pwd.db) then - set rand = 1 - endif -endif - -if ($rand == 1) then - echo "It looks like you have a passwd file that can be accessed at random." - set pr = 'Do you want top to take advantage of this' -else - echo "It looks like you have conventional passwd file access. Top can take" - echo "advantage of a random access passwd mechanism if such exists. Do" - echo "you want top to assume that accesses to the file /etc/passwd are done" - set pr = 'with random access rather than sequential' -endif - -if ($nodefaults == 1) then - set random = $rand -endif - -./getans "${pr}?" yesno $random .$$ -set random = `cat .$$` - -echo "" -echo "Compiling prime.c" -$Cmdcc $cdefs -o prime prime.c -lm -if ($status != 0) then - echo "Oh well." - rm -f prime -endif - -echo "" - -ypcat passwd.byname >&/tmp/$$.a -if ($status == 0) then - set cnt = `wc -l &/tmp/$$.a - if ($status == 0) then - set cnt = `wc -l /tmp/$$.b - grep '^....r..r..' /tmp/$$.b >&/dev/null - if ($status == 1) then - grep '^....r..-..' /tmp/$$.b >&/dev/null - if ($status == 0) then - set t_group = `awk ' { print $4 }' /tmp/$$.b` - set t_mode = 2755 - echo "It looks like only group $t_group can read the memory devices." - else - set t_mode = 4755 - echo "It looks like only root can read the memory devices." - endif - else - set t_mode = 755 - echo "It looks like anybody can read the memory devices." - endif -else - echo "It looks like there are no memory device special files." - set t_mode = 755 -endif -if ($nodefaults) then - set owner = $t_owner - set group = $t_group - set mode = $t_mode -endif -echo "Tell me how to set the following when top is installed:" -./getans "Owner" user "$owner" .$$ -set owner = `cat .$$` -./getans "Group owner" group "$group" .$$ -set group = `cat .$$` -./getans "Mode" integer "$mode" .$$ -set mode = `cat .$$` -rm -f /tmp/$$.b - -echo "" -./getans "Install the executable in this directory" file "$bindir" .$$ -set bindir = `cat .$$` - -echo "" -./getans "Install the manual page in this directory" file "$mandir" .$$ -set mandir = `cat .$$` - -echo "" -./getans "Install the manual page with this extension" string "$manext" .$$ -set manext = `cat .$$` - -echo "" -./getans "Install the manual page as 'man' or 'catman'" string "$mansty" .$$ -set mansty = `cat .$$` - -echo "" -echo "We are done with the questions." - -# Some Unix environments are so poor that their csh doesn't even support -# the "eval" builtin. Check for this before relying on its use to save -# the current configuration. -/bin/csh -fc "eval echo foo" >&/dev/null -if ($status == 1) then - echo "Can't save configuration (nonfatal)" -else - echo "Saving configuration..." -# save settings to use as defaults the next time - rm -f .defaults - touch .defaults - foreach v ($vars) - set tmp = `eval echo \$$v` - echo set $v = "'$tmp'" >>.defaults - end -endif - -fast: - -# clean up -rm -f $$.[fmna] - -# set the link for machine.c -rm -f machine.c machine.o -ln -s machine/m_${module}.c machine.c - -# get definitions out of the module file -set libs = `grep LIBS: machine/m_${module}.desc | sed -e 's/^.[^:]*: *//'` -set cflgs = `grep CFLAGS: machine/m_${module}.desc | sed -e 's/^.[^:]*: *//'` -set tcap = `grep TERMCAP: machine/m_${module}.desc | sed -e 's/^.[^:]*: *//'` -set math = `grep MATH: machine/m_${module}.desc | sed -e 's/^.[^:]*: *//'` - -# get osrev defition, if we can -set uname="" -if (-e /usr/bin/uname) then - set uname=/usr/bin/uname -else if (-e /bin/uname) then - set uname=/bin/uname -endif - -if ("$uname" != "") then -# different versions of tr can't agree on the way to specify ranges, so -# we will have to give the range explicitly.....sigh. - set osrev="-DOSREV=`$uname -r | tr -cd ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`" -else - set osrev="" -endif - -# default for tcap (termcap) -if ("$tcap" == "") then - set tcap="-ltermcap" -else if ("$tcap" == "none") then - set tcap="" -endif - -# allow for the module to override or remove -lm -if ("$math" == "") then - set math="-lm" -else if ("$math" == "none") then - set math="" -endif - -if ( { grep -s SIGKILL /usr/include/signal.h } ) then - set signal="/usr/include/signal.h" -else - set signal="/usr/include/sys/signal.h" -endif - - -echo "Building Makefile..." -sed -e "s|%topn%|$topn|" \ - -e "s|%delay%|$delay|" \ - -e "s|%owner%|$owner|" \ - -e "s|%group%|$group|" \ - -e "s|%mode%|$mode|" \ - -e "s|%bindir%|$bindir|" \ - -e "s|%mandir%|$mandir|" \ - -e "s|%manext%|$manext|" \ - -e "s|%mansty%|$mansty|" \ - -e "s|%tablesize%|$TableSize|" \ - -e "s|%libs%|$libs|" \ - -e "s|%cflgs%|$cflgs|" \ - -e "s|%termcap%|$tcap|" \ - -e "s|%math%|$math|" \ - -e "s|%cdefs%|$cdefs|" \ - -e "s|%signal%|$signal|" \ - -e "s|%cc%|$Cmdcc|" \ - -e "s|%awk%|$Cmdawk|" \ - -e "s|%install%|$Cmdinstall|" \ - -e "s|%shell%|$Cmdshell|" \ - -e "s|%osrev%|$osrev|" \ - Makefile.X >Makefile - -echo "Building top.local.h..." -sed -e "s|%LoadMax%|$LoadMax|" \ - -e "s|%TableSize%|$TableSize|" \ - -e "s|%NominalTopn%|$NominalTopn|" \ - -e "s|%topn%|$topn|" \ - -e "s|%delay%|$delay|" \ - -e "s|%random%|$random|" \ - top.local.H >top.local.h - -echo "Building top.1..." -sed -e "s|%topn%|$topn|" \ - -e "s|%delay%|$delay|" \ - top.X >top.1 -if (-e machine/m_${module}.man ) then - cat machine/m_${module}.man >>top.1 -endif - -# clean up -rm -f .$$ - -echo 'Doing a "make clean".' -make clean - -echo 'To create the executable, type "make".' -echo 'To install the executable, type "make install".' -exit 0 - -byebye: -rm -f .$$ $$.[fmna] /tmp/$$.[ab] -exit 1 diff --git a/contrib/top/DISCLAIMER b/contrib/top/DISCLAIMER deleted file mode 100644 index 796d7a24c604..000000000000 --- a/contrib/top/DISCLAIMER +++ /dev/null @@ -1,31 +0,0 @@ -DISCLAIMER - -"top" is distributed free of charge. It should not be considered an -official product of Group sys Consulting. William LeFebvre supports -"top" in his spare time and as time permits. - -NO WARRANTY: - -BECAUSE "top" IS DISTRIBUTED FREE OF CHARGE, THERE IS ABSOLUTELY NO -WARRANTY PROVIDED, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING, GROUP SYS CONSULTING, ARGONNE -NATIONAL LABORATORY, NORTHWESTERN UNIVERSITY, WILLIAM N. LeFEBVRE -AND/OR OTHER PARTIES PROVIDE "top" "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -PROGRAM IS WITH YOU. SHOULD THE "top" PROGRAM PROVE DEFECTIVE, YOU -ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -IN NO EVENT WILL GROUP SYS CONSULTING, ARGONNE NATIONAL LABORATORY, -NORTHWESTERN UNIVERSITY, WILLIAM N. LeFEBVRE, AND/OR ANY OTHER PARTY -WHO MAY MODIFY AND REDISTRIBUTE "top", BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY LOST PROFITS, LOST MONIES, OR OTHER SPECIAL, INCIDENTAL -OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE -(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED -INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR A FAILURE OF THE -PROGRAM TO OPERATE WITH OTHER PROGRAMS) THE PROGRAM, EVEN IF YOU HAVE -BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY -ANY OTHER PARTY. - -So there! diff --git a/contrib/top/FAQ b/contrib/top/FAQ deleted file mode 100644 index 6cbd13f2d383..000000000000 --- a/contrib/top/FAQ +++ /dev/null @@ -1,264 +0,0 @@ - TOP - Version 3.5 - Beta Release 11 - - William LeFebvre - with much help from others - - -FREQUENTLY ASKED QUESTIONS AND THEIR ANSWERS - -This FAQ is broken out in to several topics. - - -GENERAL - - 1. "Where do I get the latest version of top?" - -The official site for top is "ftp.groupsys.com" in the directory -"/pub/top". It is also available from the following mirror sites: -"pharos.dgim.doc.ca" in /packages/top, "uiarchive.uiuc.edu" in -/pub/packages/top, "sunsite.auc.dk" in /pub/unix/top. European -users should consider using the Denmark (dk) site. - - 2. "Is there a web page for top?" - -Yes. Point your browser at http://www.groupsys.com/top. It includes -all documentation, a nice interactive display which describes the -various components of the output of top, web-based retrieval of the -package, year 2000 information, and pointers to the mailing list. - - 3. "Is there a mailing list for top?" - -The official list for announcements is "top-announce@groupsys.com". -This list is managed by "majordomo@groupsys.com". Announcements of -importance to all top users will be sent to this list, including new -releases, availability of beta test versions, emergency revisions and -patches, etc. Anyone is welcome to join top-announce. This is a -read-only list. The list of subscribers will not (intentionally) be -made available, and postings to the list are limited. - -In addition, there is a top developers mailing list that is used by -beta testers and other people who help me port the program to various -machines. Membership to this list is solely at my discretion. If you -feel qualified to act as a beta tester, or if you are doing development -work on top (such as porting to a new platform), you may submit a -request by sending a message to "top-spinners-request@groupsys.com" -containing the word "subscribe". I will contact you within a few days, -as my schedule permits. - - 4. "What about Year 2000 compliance"? - -Top should not experience any problems with the transition to the year -2000. A full statement concerning top and the year 2000 can be found -in the file "Y2K" included with the distribution. - - - 5. "Why does it take so long for a new version of top to go through the - beta test process?" - -This is completely my fault. I have just not had the time to give top -the attention it deserves. I thank everyone for their patience, and I -hope that with the recent changes in the direction of my career that I -can spend more time on this. - - 6. "Top is not written in ANSI C. Do you ever plan to change that?" - -Top predates ANSI C by about 5 years. Yeah, it'll get "fixed" eventually. -Probably in 3.6. - - -CONFIGURING - - 7. "Configure said that it saw /proc and is recommending that I install top - setuid root. Is there any way around this? Is it safe?" - -There is no way around it. Complain to POSIX. Every effort has been made -to make top a secure setuid program. However, we cannot guarantee that -there are no security problems associated with this configuration. The -places where top is most vulnerable are the builtin kill and renice -commands. There is no internal top command that causes top to start a shell -as a subprocess. Some SVR4 systems may contain a bug that enables a user to -renice his own processes downward (to lower nice values that are more -favorable for the process). This problem has been fixed for the Solaris 2.x -modules, but may still exist in others. We will hopefully fix this up in -the next release. - - 8. "Why is Configure a c-shell script? I thought c-shell scripts were - evil?" - -They are. :-) I'll probably be rewriting the Configure script for the -next release, or switching to something like Gnu configure. - - -COMPILING - - 9. "We just upgraded our operating system to a new version and top broke. - What should we do?" - -Recompile it. Top is very sensitive to changes in internal kernel data -structures. It is not uncommon for a new version of the operating system to -include changes to kernel data structures. - - -RUNNING - -10. "I just finished compiling top and it works fine for root, but when - I try to run it as a regular user it either complains about files - it can't open or it doesn't display all the information it should. - Did I do something wrong?" - -Well, you're just not done. On many operating systems today, access to -many of the kernel memory devices and other system files is restricted to -either root or a particular group. The Configure script figures this out -(usually) and makes sure that the "intsall" rule in the Makefile will -install top so that anyone can run it successfully. However, you have to -*install* it first. Do this with the command "make install". - -11. "Top is (not) displaying idle processes and I don't (do) want it to." - -This default has only changed about a dozen times, and I finally got tired -of people whining about it. Go read the manual page for the current version -and pay special attention to the description of the "TOP" environment -variable. - -12. "We have so much memory in our machine that the memory status display - (the fourth line) ends up being longer than 80 characters. This - completely messes up top's output. Is there a patch?" - -Most modules have been changed to use new memory formatting functions which -will display large values in terms of megabytes instead of kilobytes. This -should fix all occurences of this problem. If you encounter a system where -this large memory display overflow is still occurring, please let me know -(send mail to ). Also note that newer versions of top can -use columns beyond 79, and understand window resizes. So you can always -make your window bigger. - -13. "I tried to compile top with gcc and it doesn't work. I get - compilation errors in the include files, or I get an executable that - dumps core, or top displays incorrect numbers in some of the displays. - What's wrong?" - -Gnu CC likes very much to use its own include files. Not being a gcc -expert, I can't explain why it does this. But I can tell you that if -you upgrade your operating system (say from Solaris 2.4 to Solaris -2.5) after installing gcc, then the include files that gcc uses will -be incorrect, especially those found in the "sys" directory. Your -choices are: (1) rebuild and reinstall the "standard" include files -for gcc (look for scripts in the distribution called "fixincludes" and -"fixinc.svr4"), (2) compile machine.c with "CFLAGS=-I/usr/include" -then make the rest of the object files normally, or (3) use "cc". -Solaris 2.6 users should also consult FAQ #20. - -14. "The cpu state percentages are all wrong, indicating that my machine is - using 95% system time when it is clearly idle. What's wrong?" - -This can happen if you compiled with gcc using the wrong include files. -See the previous question. - - -SUNOS PROBLEMS - -15. "I tried compiling top under SunOS version 4.1.x and it got compile time - errors. Is there a patch?" - -If you try compiling top in a "System V environment" under SunOS (that is, -/usr/5bin is before /usr/bin on your path) then the compilation may fail. -This is mostly due to the fact that top thinks its being compiled on a -System V machine when it really isn't. The only solution is to put /usr/bin -and /usr/ucb before /usr/5bin on your path and try again. - - -SVR4-derived PROBLEMS - -16. "When I run top on my SVR4-derived operating system, it displays all - the system information at the top but does not display any process - information (or only displayes process information for my own - processes). Yet when I run it as root, everything works fine." - -Your system probably uses the pseudo file system "/proc", which is by -default only accessible by root. Top needs to be installed setuid root on -such systems if it is going to function correctly for normal users. - - -SOLARIS PROBLEMS - -17. "Under Solaris 2, when I run top as root it only shows root processes, - or it only shows processes with a PID less than 1000. It refuses to - show anything else. What do I do?" - -You probably compiled it with /usr/ucb/cc instead of the real C compiler. -/usr/ucb/cc is a cc front end that compiles programs in BSD source-level -compatability mode. You do not want that. Make sure that /usr/ucb is not -on your path and try compiling top again. - -18. "Under Solaris 2, I compiled top using what I am sure is the correct - compiler but when I try to run it it complains about missing dynamic - libraries. What is wrong?" - -Check to see if you have LD_LIBRARY_PATH defined in your shell. If you do, -make sure that /usr/ucblib is not on the path anywhere. Then try compiling -top again. - -19. "Under Solaris 2, when I try to run top it complains that it can't open - the library "libucb.so.1". So I changed the LIBS line in m_sunos5.c - to include -R/usr/ucblib to make sure that the dynamic linker will look - there when top runs. I figured this was just an oversight. Was I - right?" - -No, you were not right. As distributed, top requires NO alterations -for successful compilation and operations under any release of Solaris -2. You probably compiled top with /usr/ucb/cc instead of the real C -compiler. See FAQ #10 for more details. - -20. "When I try to compile top under Solaris 2.6 using gcc I get compile - time errors. There appear to be problems with the include files, - such as 'u_rlimit has incomplete type' and/or 'u_saved_rlimit has - incomplete type'. I've already run fixinc.svr4 as per FAQ #13. - Why didn't that fix it?" - -Only top versions 3.5 and later are compatible with Solaris 2.6. Make -sure you are using the most up-to-date version. Earlier beta release -copies of version 3.5 had additional problems when compiled with gcc. -Retrieve the official version 3.5 (non-beta) release from one of the -sites listed in FAQ #1 or FAQ #2. - - -SCO PROBLEMS - -21. "When I try to run Configure, it complains about a syntax error." - -Some versions of SCO's csh do not understand the syntax "$<". Earlier -releases of top depended on this syntax to read input from the installer's -terminal during the installation process. Version 3.5 fixes this. - - -SVR42 PROBLEMS - -22. "The memory display doesn't work right. Why?" - -This is a known bug with the svr42 module. The problem has been traced down -to a potential bug in the "mem" driver. The author of the svr42 module is -working on a fix. - - -STILL STUCK - -23. I'm still stuck. To whom do I report problems with top?" - -The most common problems are caused by top's sensitivity to internal kernel -data structures. So make sure that you are using the right include files, -and make sure that you test out top on the same machine where you compiled -it. Sun's BSD Source Compatability Mode is also a common culprit. Make -sure you aren't using either /usr/ucb/cc or any of the libraries in -/usr/ucblib. Finally, make sure you are using the correct module. If there -does not appear to be one appropriate for your computer, then top probably -will not work on your system. - -If after reading all of this file and checking everything you can you are -still stuck, then send mail to "wnl@groupsys.com". I will answer your mail -when I have time. Please bear with me in that regard! If it looks like the -problem is machine-specific, I will forward the report along to the module's -author. If you would like to converse directly with the module author, the -authors' names are listed at the beginning of the module .c file in the -"machine" directory. diff --git a/contrib/top/FREEBSD-upgrade b/contrib/top/FREEBSD-upgrade deleted file mode 100644 index 202bbe1d1596..000000000000 --- a/contrib/top/FREEBSD-upgrade +++ /dev/null @@ -1,22 +0,0 @@ -$FreeBSD$ - -This file contains notes regarding the upgrade of top(1). See the vendor -import instructions at: - - https://www.freebsd.org/doc/en/articles/committers-guide/subversion-primer.html#svn-advanced-use-vendor-imports - -The upstream project pages for top(1) are: - - http://www.unixtop.org/ - - https://sourceforge.net/projects/unixtop/ - -contrib/top/machine.h specifies an interface that must be provided by the -target OS. That interface is implemented in usr.bin/top/machine.c - -To enable building on case-insensitive filesystems, the following files were -renamed: - - contrib/top/top.X -> contrib/top/top.xs - contrib/top/top.local.H -> contrib/top/top.local.hs - diff --git a/contrib/top/INSTALL b/contrib/top/INSTALL deleted file mode 100644 index c435c06142c2..000000000000 --- a/contrib/top/INSTALL +++ /dev/null @@ -1,166 +0,0 @@ - TOP - Version 3.5 - - William LeFebvre - and a cast of many - -INSTALLATION - -Configuration and installation of top is very straightforward. After -unpacking the sources, run the script "Configure". It will present you -with a series of questions, all of which should be explained in the -presentation. After you have answered all the questions, "Configure" will -perform all the necessary configuration. Once this is finished, type -"make install". Make will compile the sources then install the resulting -executable and manual page in the appropriate places. - -The most difficult step in the configuration is the choice of an -appropriate machine-specific module. The Configure script gives you a -list of choices complete with brief descriptions of when each choice is -appropriate. Each module is contained in a separate c file in the -directory "machine". The module contains all of the machine-specific code -that makes top work correctly on the architecture in question. All of the -code in the top-level directory is machine-independent (or at least -strives to be). Hints for some module choices that are not obvious are -given at the end of this file. - -The first comment in each c file in that directory contains the synopsis -AND a detailed description of the machines for which that module is -appropriate. It also contains a list of authors for that module. If you -are really stumped in this choice, use grep to find your machine -manufacturer's name or operating system name in machine/*.c. If you still -can't find one that is appropriate, then chances are very good that one -hasn't been written yet. If that is the case, then you are out of luck. - -HANDLING MULTIPLE ARCHITECTURES - -If you need to recompile top for a different architecture (that is, using -a different module) you need to reconfigure top. A short cut is available -to make this a little easier. If all of your previous answers to the -configuration questions (except for the module name of course) are -adequate for the new architecture, then you can just use the command -"Configure ". The configuration script will reconfigure top -using the new module and all the answers you gave last time. It will -finish with a "make clean". Once that completes, type "make install" -and make will compile the sources and do the installation. - -HANDLING MULTIPLE OS VERSIONS - -By far the most frequently received bug report for top is something like -this: "We just upgraded our operating system to version 99.9.9.9 and top -broke. What should we do?" The simple answer is "recompile". - -Top is very sensitive to changes in internal kernel data structures -(especially the proc and user structures). Some operating systems -(especially SunOS) are notorious for changing these structure in every -minor release of the OS. This means that a top executable made under one -version of the OS will not always work correctly (if even at all) under -another version. This is just one of those tough facts of life. There is -really no way around it. - -To make life even worse, some operating systems (SunOS again) will use -slightly different proc and user structures on different models. For -example, "top" built on a SparcStation 2 will not run correctly on a -SparcStation 10, even if they are both running SunOS 4.1.3. These -unfortunate circumstances make maintaining top very difficult, especially -in an environment that runs several different versions of the same -operating system. - -But there is hope. If your operating system has a properly functioning -"uname" command then you can handle this problem rather gracefully. -Included in the distribution is a shell file called "metatop". All this -shell file does is: - - exec top-`uname -m`-`uname -r` "$@" - -So when you run this script, it execs a filename that is unique to your -specific machine architecture and your OS revision number. - -To use "metatop", do the following: - - . on any machine, run Configure and choose the module that is - appropriate for the machine - . for all machines which use the same module: - . group machines according to machine architecture AND OS - revision number (i.e.: sun4-4.1.1, sun4c-4.1.1, sun4c-4.1.2, - sun4-4.1.3, sun4c-4.1.3, sun4m-4.1.3, ...) - . for each group, choose one machine from that group and on it - run "make clean; make installmeta". - - -The "installmeta" rule in the makefile will insure that top is compiled, -install the shell file "metatop" as "top", then install the executable -"top" with a name appropriate to the machine architecture and OS revision. - - -HINTS FOR CHOOSING THE CORRECT MODULE: - -SOLARIS 2.x - -All versions of Solaris will now work with the module sunos5. Version -specific modules (such as sunos54) no longer exist. - - -SUNOS 4.x AND MULTIPROCESSOR ARCHITECTURES - -First, we need to be speaking the same language: - -sun4 a regular sparc sun 4 architecture machine (sparc station 1, - sparc station 2, IPC, SLC, etc.) - -sun4m a multiprocessor sparc (Sparc 10, 4/670, 4/690) - -I intended to write the sunos4 module so that an executable compiled on a -sun4m machine would work correctly on a sun4 machine. Unfortunately my -experiments indicate that this cannot be done. It turns out that the user -structure is so different between these two architectures that nothing -short of a serious hack will make the same executable work correctly on -both machines. I recommend that you use the separate module "sunos4mp" -when making an executable for a sun4m architecture, and use "sunos4" when -making an executable for sun4 or sun4c architectures. - -DIGITAL UNIX V4.0 - -This is the successor to DECOSF/1. Use the module decosf1. - -SOLBOURNE OPERATING SYSTEM (OS/MP) - -If you are running OS/MP version 4.1A, then use the module "osmp4.1a". - -If you are running a version of OS/MP OLDER than 4.1A (that is, one -of its predecessors), use the module "sunos4". - -If you are running OS/MP 4.1B or LATER, use the module "sunos4mp". - -HP/UX OPERATING SYSTEM - -The module hpux8 works on all version 8 systems. Some say that it works -with version 9 as well, but one user did send me a separate module for -version 9. This module has only been tested on series 800 machines. I -would recommend the following for those running version 9: try hpux9 and -if it doesn't work then try hpux8. If neither work, then send mail to me -and/or the modules' authors. Another note: we have a model 730 supposedly -running version 9.01. The module hpux9 did not compile successfully, but -the module hpux8 worked fine. The module hpux10 works on all revisions of -HP/UX 10 except 10.10, where HP removed the definition of the proc structure -from the system include files. - -NET/2 386BSD SYSTEMS - -If your version of the operating system has patchkit 2.4 installed, -then you will need to modify machine/m_386bsd.c and uncomment the -definition of PATCHED_KVM. This patchkit makes what more than a few -people believe to be a wholly unnecessary patch to the way the kvm -routines work. - -A/UX SYSTEMS - -There is a module for A/UX 3.0 and 3.1. Whether or not it works for -any other version is not known. Proceed at your own risk. - -Although AUX does not generally have a renice systemcall, it can be -implemented by tweeking kernel memory. The flag IMPLEMENT_SETPRIORITY -controls the inclusion of this code. It is off be default. While -such a simple hack should not be difficult to get right, USE THIS -FEATURE AT YOUR OWN RISK! - diff --git a/contrib/top/Make.desc.X b/contrib/top/Make.desc.X deleted file mode 100644 index 6fcb79e2778a..000000000000 --- a/contrib/top/Make.desc.X +++ /dev/null @@ -1,24 +0,0 @@ -# Makefile for .desc files - -# This makefile is the prototype for "Make.desc", which is used by -# top's Configure script to build .desc files and the SYNOPSIS file. -# Configure then uses these files to ask appropriate questions. - -# Written by William LeFebvre, Group sys Consulting -# (formerly of Northwestern University and Rice University) - -# DO NOT EDIT "Make.desc"!!! Make changes to "Make.desc.X", -# then "make veryclean", then run "Configure". - -# The list of .desc files will be inserted after this next line: -DESCS=\ - -.SUFFIXES: .desc - -.c.desc: - sed -e '/^$$/,$$d' -e 's,^[/ *]*,,' $< > $@ - -all: SYNOPSIS - -SYNOPSIS: $(DESCS) - grep SYNOPSIS: $(DESCS) | sed -e 's@^machine/m_@@' -e 's@.desc:.[^:]*: *@:@' >SYNOPSIS diff --git a/contrib/top/Makefile.X b/contrib/top/Makefile.X deleted file mode 100644 index a9bfe65b820a..000000000000 --- a/contrib/top/Makefile.X +++ /dev/null @@ -1,117 +0,0 @@ -# Makefile for "top", a top 10 process display for Unix -# -# This makefile is for top, version 3 -# -# Written by William LeFebvre, Group sys Consulting -# (formerly of Northwestern University and Rice University) - -# DO NOT EDIT "Makefile"!!!! Make changes to "Makefile.X" and rerun -# Configure. - -# Executables (these should be obvious): - -SHELL = %shell% -CC = %cc% -AWK = %awk% -INSTALL = %install% - -# installation information: -# OWNER - name (or uid) for the installed executable's owner -# GROUP - group name (or gid) for the installed executable's group -# MODE - mode for the installed executable (should start with a 0) -# BINDIR - directory where the executable should live -# MANDIR - directory where the manual page should live -# MANEXT - installed man pages end in .$(MANEXT) -# MANSTY - "man" or "catman" depending on what's to be installed -# SIGNAL - or ; the one with signal definitions -# TROFF - most appropriate troff command - -OWNER = %owner% -GROUP = %group% -MODE = %mode% -BINDIR = %bindir% -MANDIR = %mandir% -MANEXT = %manext% -MANSTY = %mansty% -SIGNAL = %signal% - -# Values for the two defaults in "top": -# TOPN - default number of processes to display -# DELAY - default delay between updates -# -# set TOPN to -1 to indicate infinity (so that top will display as many -# as the screen will hold). - -TOPN = %topn% -DELAY = %delay% - -CFILES = top.c commands.c display.c screen.c username.c \ - utils.c version.c getopt.c machine.c -OBJS = top.o commands.o display.o screen.o username.o \ - utils.o version.o getopt.o machine.o - -CDEFS = %cdefs% -LIBS = %libs% -TERMCAP = %termcap% -MATH = %math% - -CFLAGS = %cflgs% $(CDEFS) -LINTFLAGS = -x $(CDEFS) - -all: Makefile top.local.h top - -Makefile: Makefile.X - @echo 'You need to run the script "Configure" before running "make".' - exit 10 - -top.local.h: top.local.H - @echo 'You need to run the script "Configure" before running "make".' - exit 10 - -top: $(OBJS) - rm -f top - $(CC) $(CDEFS) -o top $(OBJS) $(TERMCAP) $(MATH) $(LIBS) - -lint: sigdesc.h - $(LINT) $(LINTFLAGS) $(CFILES) - -# include file dependencies -top.o: boolean.h display.h screen.h top.h top.local.h utils.h machine.h -commands.o: boolean.h sigdesc.h top.h utils.h -display.o: boolean.h display.h layout.h screen.h top.h top.local.h utils.h -screen.o: boolean.h screen.h -utils.o: top.h -version.o: top.h patchlevel.h -username.o: top.local.h utils.h - -# when compiling machine.c, include os revision definition -machine.o: machine.c top.h machine.h utils.h - $(CC) "%osrev%" $(CFLAGS) -c machine.c - -# automatically built include file -sigdesc.h: sigconv.awk $(SIGNAL) - $(AWK) -f sigconv.awk $(SIGNAL) >sigdesc.h - -clean: - rm -f *.o top core core.* sigdesc.h - -veryclean: clean - rm -f Make.desc machine/*.desc .defaults top.tar SYNOPSIS Makefile top.local.h top.1 machine.c prime - -install: top top.1 install-top install-$(MANSTY) - -install-top: - $(INSTALL) -o $(OWNER) -m $(MODE) -g $(GROUP) top $(BINDIR) - -install-man: - $(INSTALL) top.1 $(MANDIR)/top.$(MANEXT) - -install-catman: - tbl top.1 | nroff -man > $(MANDIR)/top.$(MANEXT) - -installmeta: top top.1 - $(INSTALL) -o $(OWNER) -m 755 -g $(GROUP) metatop $(BINDIR)/top - @echo $(INSTALL) -o $(OWNER) -m $(MODE) -g $(GROUP) top $(BINDIR)/top-`uname -m`-`uname -r` - @$(INSTALL) -o $(OWNER) -m $(MODE) -g $(GROUP) \ - top $(BINDIR)/top-`uname -m`-`uname -r` - $(INSTALL) top.1 $(MANDIR)/top.$(MANEXT) diff --git a/contrib/top/Porting b/contrib/top/Porting deleted file mode 100644 index b1ee25d05c46..000000000000 --- a/contrib/top/Porting +++ /dev/null @@ -1,165 +0,0 @@ -Instructions for porting top to other architectures. - -This is still a preliminary document. Suggestions for improvement are -most welcome. - -My address is now "wnl@groupsys.com". - -Before you embark on a port, please send me a mail message telling me -what platform you are porting top to. There are three reasons for -this: (1) I may already have a port, (2) module naming needs to be -centralized, (3) I want to loosely track the various porting efforts. -You do not need to wait for an "okay", but I do want to know that you -are working on it. And of course, once it is finished, please send me -the module files so that I can add them to the main distribution! - ----------- - -There is one set of functions which extract all the information that -top needs for display. These functions are collected in to one file. -To make top work on a different architecture simply requires a -different implementation of these functions. The functions for a -given architecture "foo" are stored in a file called "m_foo.c". The -Configure script looks for these files and lets the configurer choose -one of them. This file is called a "module". The idea is that making -top work on a different machine only requires one additional file and -does not require changes to any existing files. - -A module template is included in the distribution, called "m-template". -To write your own module, it is a good idea to start with this template. -If you architecture is similar to one for which a module already -exists, then you can start with that module instead. If you do so, -remember to change the "AUTHOR" section at the top! - -The first comment in a module contains information which is extracted -and used by Configure. This information is marked with words in all -capitals (such as "SYNOPSIS:" and "LIBS:"). Go look at m-template: it -is fairly self-explanatory. The text after "LIBS:" (on the same line) -is extracted and included in the LIBS definition of the Makefile so -that extra libraries which may be necessary on some machines (such as -"-lkvm") can be specified in the module. The text after "CFLAGS:" -(on the same line) is extracted and included as flags in the "CFLAGS" -definition of the Makefile (thus in every compilation step). This is -used for rare circumstances only: please don't abuse this hook. - -Some operating systems have idiosyncrasies which will affect the form -and/or content of the information top displays. You may wish to -document such anomalies in the top man page. This can be done by adding -a file called m_{modulename}.man (where {modulename} is replaced with -the name of the module). Configure will automatically add this file to -the end of the man page. See m_sunos4.man for an example. - -A module is concerned with two structures: - -The statics struct is filled in by machine_init. Each item is a -pointer to a list of character pointers. The list is terminated -with a null pointer. - -struct statics -{ - char **procstate_names; /* process state names */ - char **cpustate_names; /* cpu state names */ - char **memory_names; /* memory information names */ -}; - -The system_info struct is filled in by get_system_info and -get_process_info. - -struct system_info -{ - int last_pid; /* last pid assigned (0 means non-sequential assignment) */ - double load_avg[NUM_AVERAGES]; /* see below */ - int p_total; /* total number of processes */ - int p_active; /* number of procs considered "active" */ - int *procstates; /* array of process state counters */ - int *cpustates; /* array of cpustate counters */ - int *memory; /* memory information */ -}; - -The last three pointers each point to an array of integers. The -length of the array is determined by the length of the corresponding -_names array in the statics structure. Furthermore, if an entry in a -_names array is the empty string ("") then the corresponding value in -the value array will be skipped over. The display routine displays, -for example, the string procstate_names[0] then the number -procstates[0], then procstate_names[1], procstates[1], etc. until -procstate_names[N] == NULL. This allows for a tremendous amount of -flexibility in labeling the displayed values. - -"procstates" and "memory" are displayed as straight integer values. -Values in "cpustates" are displayed as a percentage * 10. For -example, the (integer) value 105 is displayed as 10.5%. - -These routines must be defined by the machine dependent module. - -int machine_init(struct statics *) - - returns 0 on success and -1 on failure, - prints error messages - -char *format_header(char *) - - Returns a string which should be used as the header for the - process display area. The argument is a string used to label - the username column (either "USERNAME" or "UID") and is always - 8 characters in length. - -void get_system_info(struct system_info *) - -caddr_t get_process_info(struct system_info *, int, int, int (*func)()) - - returns a handle to use with format_next_process - -char *format_next_process(caddr_t, char *(*func)()) - - returns string which describes next process - -int proc_compare(caddr_t, caddr_t) - - qsort comparison function - -uid_t proc_owner(pid_t) - - Returns the uid owner of the process specified by the pid argument. - This function is VERY IMPORTANT. If it fails to do its job, then - top may pose a security risk. - - -get_process_info is called immediately after get_system_info. In -fact, the two functions could be rolled in to one. The reason they -are not is mostly historical. - -Top relies on the existence of a function called "setpriority" to -change a process's priority. This exists as a kernel call on most 4.3 -BSD derived Unixes. If neither your operating system nor your C -library supplies such a function, then you will need to add one to the -module. It is defined as follows: - - int setpriority (int dummy, int who, int niceval) - - For the purposes of top, the first argument is meaningless. - The second is the pid and the third is the new nice value. - This function should behave just like a kernel call, setting - errno and returning -1 in case of an error. This function MUST - check to make sure that a non-root user does not specify a nice - value less than the process's current value. If it detects such - a condition, it should set errno to EACCES and return -1. - Other possible ERRNO values: ESRCH when pid "who" does not exist, - EPERM when the invoker is not root and not the same as the - process owner. - -Note that top checks process ownership and should never call setpriority -when the invoker's uid is not root and not the same as the process's owner -uid. - - -The file "machine.h" contains definitions which are useful to modules -and to top.c (such as the structure definitions). You SHOULD NOT need -to change it when porting to a new platform. - -Porting to a new platform should NOT require any changes to existing -files. You should only need to add m_ files. If you feel you need a -change in one of the existing files, please contact me so that we can -discuss the details. I want to keep such changes as general as -possible. - diff --git a/contrib/top/README b/contrib/top/README deleted file mode 100644 index c8351a843313..000000000000 --- a/contrib/top/README +++ /dev/null @@ -1,192 +0,0 @@ - TOP - Version 3.5 - - William LeFebvre - and a cast of dozens - - -If you do not want to read this entire file, then at least read -the section at the end entitled "KNOWN PROBLEMS". - -If you are having any problems getting top to work, please read the -file "FAQ" *before* contacting me. Thank you. - -"top" is a program that will give continual reports about the state of -the system, including a list of the top cpu using processes. Version 3 -of "top" has three primary design goals: provide an accurate snapshot of -the system and process state, not be one of the top processes itself, be -as portable as possible. - -Version 3 has many bug fixes from version 2.5, and it has also been -reorganized in a major way to make it easy to port to other platforms. -All system dependent code is now contained in one file. - -Top now includes a configuration script called "Configure". It helps -the installer choose the correct parameters for this particular -installation. This script MUST be run before attempting to compile top. - -Top requires read access to the memory files "/dev/kmem" and "/dev/mem" -as well as the system image "/vmunix". Some installations have these -files protected from general access. These sites would have to install -this program in the same way that programs such as "ps" are installed. -In addition, on those Unix variants that support the proc filesystem -(such as SVR4 and Solaris 2), top requires read access to all the files -in /proc: typically dictating that top be installed setuid to root. - -CAVEAT: version 3 of top has internal commands that kill and renice -processes. Although I have taken steps to insure that top makes -appropriate checks with these commands, I cannot guarantee that these -internal commands are totally secure. IF YOU INSTALL top as a SETUID -program, you do so AT YOUR OWN RISK! I realize that some operating -systems will require top to run setuid, and I will do everything I can -to make sure that top is a secure setuid program. - -Configure will ask you to input values for certain parameters. Before -each parameter, Configure will display a description of what the -parameter does. Read the description and choose an appropriate value. -Sometimes a default will appear in brackets. Typing just return will -choose the default. - -System support now takes the form of "modules". Adding support for -a different architecture requires only adding a module. Configure -asks which module to use when it is configuring top. See the file -"Porting" for a description of how to write your own module. - -To compile and install "top", read the file "INSTALL" and follow the -directions and advice contained therein. - -Once you have created a binary for one particular type of machine, you -can reconfigure for another type with "./Configure modulename" where -"modulename" is replaced with the appropriate module name. All other -parameter values are kept the same. Note that in some cases this may -not be appropriate. - -If you make any kind of change to "top" that you feel would be -beneficial to others who use this program, or if you find and fix a bug, -please send me the change. - -Be sure to read the FAQ enclosed with the distrubution. It contains -answers to the most commonly asked questions about the configuration, -installation, and operation of top. - - -AVAILABILITY - -The latest version of "top" is now being made available via anonymous -FTP from the host "ftp.groupsys.com" in the directory "/pub/top". -Additional modules will be made available in the directory -"/pub/top/m". The site "eecs.nwu.edu" will continue to house copies -of the distribution as well. - -Here are HTML links for the four best "top" archive sites: - -Top archive (groupsys.com) -Top archive (eecs.nwu.edu) - Top mirror (dgim.doc.ca) -Top mirror (uiuc.edu) - -New releases will be posted to comp.sources.unix as they become -available. Sites which arhive that newsgroup will also contain copies -of the distribution. - -Announcements about availability will be made to the mailing list -"top-announce@groupsys.com". This is an open list maintained by -majordomo. To join the list, send a message containing the word -"subscribe" to "top-announce-request@groupsys.com". Addresses of -subscribers to this list are kept confidential and will never be used -for any purpose other than as recipients of announements concerning -this software. - - -KNOWN PROBLEMS: - -Gnu CC - -Compiling via Gnu CC continued to be the source of most of the -questions I receive. By far the most common mistake made by those -attempting to compile top with Gnu CC is out of date include files. -When the operating system is upgraded, the include files that are part -of the gcc package MUST also be updated. Gcc maintains its own -include files. Even a minor OS upgrade can involve changes to some of -the kernel's internal data structures, which are defined in include -files in "sys". Top is very sensitive to these changes. If you are -compiling with gcc and experience any sort of strange problems, please -make sure the include files you are using are up to date BEFORE -sending me a bug report. Look in the gcc source distribution for the -shell script "fixincludes". - -HP/UX 10.10 - -In their infinite wisdom, the folks at HP have decided that mere mortals -such as you and I don't need to know what the kernel's proc structure looks -like. To that end, they have removed all useful content from the include -file in version 10.10. As a result, top will not compile -under 10.10. What HP is trying to accomplish with this move is to force -iconoclasts such as myself to use "pstat" for collecting all process -information. I have no immediate solution for this problem, but hope to -obtain a sufficiently complete definition of "struct proc" at some point in -the near future. Stay tuned. - -DIGITAL UNIX 4.0 (DECOSF/1 V4.0) - -A user has reported that idle processes are not displayed regardless -of the flags used when invoking top. We have not had time to track -this problem down. - -DECOSF/1 V3.0 - -There is a bug either in the module, in utils.c, or in DEC's optimizer that -is tickled by the decosf1 module when compiled under V3.0 (and perhaps -earlier versions). Top compiled using DEC's compiler with optimization -will consistently produce a segmentation fault (in format_next_process -while calling sprintf). To work around this problem, either compile top -with gcc or turn off optimization (compile without -O). We think that -one of the bugs fixed in utils.c fixed this problem as well, but we are -not certain. - - -System V R 4.2 - -Load average and memory displays do not work. The problem has been -traced down to a potential bug in the "mem" driver. The author -of the svr42 module is working on a fix. - - - -GRATITUDE - -My perpetual thanks to all the people who have helped me support top -on so many platforms. Without these people, top would not be what it -is. Here is a partial list of contributors and other individuals. - - Robert Boucher - Marc Cohen - David Cutter - Casper Dik - Charles Hedrick - Andrew Herbert - Jeff Janvrin - Torsten Kasch - Petri Kutvonen - William L. Jones - Tim Pugh - Steve Scherf - Phillip Wu - -(My apologies if I missed anyone.) - - -AUTHOR - - William LeFebvre - Group sys Consulting - wnl@groupsys.com - - - U.S. Mail address: - William LeFebvre - Group sys Consulting - 11585 Jones Bridge Road - Suite 420-139 - Alpharetta, GA 30022 - (770) 813-3224 diff --git a/contrib/top/Y2K b/contrib/top/Y2K deleted file mode 100644 index 7cf17bff96cd..000000000000 --- a/contrib/top/Y2K +++ /dev/null @@ -1,26 +0,0 @@ -Top and the Year 2000 - -The software package top will not be affected by years numbering -between 2000 and 2037. No portion of the top code stores dates on -disk. All date processing in top is performed with functions from the -Unix C library and Unix kernel. The specific functions are: time(2) -and ctime(3S). These functions deal exclusively with conventional -Unix time values (number of seconds since Midnight January 1, 1970 -GMT) and produce strings with a 4-digit year. At no point in the code -for top are the last two digits used to represent a year. - -Top and the Year 2038 - -In the year 2038 top will fail to represent the time of day correctly -on 32-bit Unix operating systems. This is due to a limitation in the -way Unix represents time. Top will only work on systems whose kernel -call "time" and C library call "ctime" have been adjusted to represent -time with a value greater than 32 bits. The exact date and time of -this failure is 3:14:08 January 19, 2038 GMT. Note that this failure -will only affect the display of the current time in the output from -top. - - -THERE IS ABSOLUTELY NO WARRANTY PROVIDED WITH THIS SOFTWARE. -Please see the contents of the file "DISCLAIMER" for further -information. diff --git a/contrib/top/getans b/contrib/top/getans deleted file mode 100755 index 1b741f7cb7c2..000000000000 --- a/contrib/top/getans +++ /dev/null @@ -1,118 +0,0 @@ -#!/bin/sh -# getans prompt type default results_filename -# type is one of -# number -# integer -# neginteger -# file default=default filename -# path -# yesno default=0,1 corres yes or no -# string (default) - -RAWPMPT=$1 -TYP=$2 -DFLT=$3 -OFNM=$4 - -ny0="no"; ny1="yes" -if [ ${TYP} = "yesno" ]; then - eval ny=\$ny${DFLT} - pmpt="${RAWPMPT} [$ny]: " -else - if [ -z "${DFLT}" ]; then - pmpt="${RAWPMPT}" - else - pmpt="${RAWPMPT} [${DFLT}]: " - fi -fi -if [ x"`echo -n`" = x-n ] -then - c=\\c -else - n=-n -fi - -while : -do - echo $n "$pmpt"$c - read input - case "$TYP" in - number) - tmp=`echo $input | tr -d 0123456789.` - if [ -n "$tmp" ]; then - echo "Invalid number. Please try again." - continue - fi - ;; - - integer) - tmp=`echo $input | tr -d 0123456789` - if [ -n "$tmp" ]; then - echo "Invalid integer. Please try again." - continue - fi - ;; - - neginteger) - if [ "x$input" != "x-1" ]; then - tmp=`echo $input | tr -d 0123456789` - if [ -n "$tmp" ]; then - echo "Invalid integer. Please try again." - continue - fi - fi - ;; - - file) - if [ -z "$input" ]; then - input=${DFLT} - fi - if [ ! -f "$input" -a ! -d "$input" ]; then - echo "The file $input does not exist. Please try again." - continue - fi - ;; - - path) - if [ -z "$input" ]; then - input="${DFLT}" - fi - if [ ! -f "$input" ]; then - path=`echo $PATH | sed -e s'/::/ . /g' -e 's/:/ /g'` - x= - for elt in $path; do - if [ -f "$elt/$input" ]; then x=1; break; fi - done - if [ -z "$x" ] ;then - echo "The command $input was not found. Please try again." - continue - fi - fi - ;; - - yesno) - if [ -z "$input" ]; then - input="${DFLT}" - else - case $input in - y | yes) - input=1 ;; - n | no) - input=0 ;; - *) - echo 'Please answer "yes" or "no".' - continue ;; - esac - fi - ;; - - *) ;; - esac - break -done - -if [ -z "$input" ]; then - input="${DFLT}" -fi - -echo $input > ${OFNM} diff --git a/contrib/top/install-sh b/contrib/top/install-sh deleted file mode 100755 index d8b6283eaca1..000000000000 --- a/contrib/top/install-sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/sh -# -# this shell script is amazingly similar to the old and lamented -# BSD "install" command. It recognized the following options: -# -# -o target file owner -# -m target file mode -# -g target file group owner -# -# -# scan the options -# -while [ $# -gt 0 ]; do - case $1 in - -o) - owner=$2 - shift ; shift - ;; - - -m) - mode=$2 - shift; shift - ;; - - -g) - group=$2 - shift ; shift - ;; - - -*) - echo "install: unknown option $1" - exit - ;; - - *) - break - ;; - esac -done -# -# we need two more: filename and destination -# -if [ $# -ne 2 ]; then - echo "Usage: install [ -o owner ] [ -m mode ] [ -g group ] file destination" - exit -fi -# -# first, copy -# -cp $1 $2 -# -# normalize the name -# -dest=$2 -if [ -d $2 ]; then - dest=$2/`basename $1` -fi -# -# do optional things -# -if [ "$owner" ]; then - chown $owner $dest -fi -if [ "$group" ]; then - chgrp $group $dest -fi -if [ "$mode" ]; then - chmod $mode $dest -fi diff --git a/contrib/top/m-template b/contrib/top/m-template deleted file mode 100644 index 569b0e0fccd2..000000000000 --- a/contrib/top/m-template +++ /dev/null @@ -1,241 +0,0 @@ -/* - * top - a top users display for Unix - * - * THIS IS A TEMPLATE FILE FOR A MACHINE DEPENDENT (m_...c) FILE - * - * SYNOPSIS: one line description of machine this module works with - * - * DESCRIPTION: - * Detailed description of this machine dependent module. - * It can be multiple lines, but a blank comment line (one with only an - * asterisk) is considered to end it. Place here a complete list of - * the machines and OS versions that this module works on. - * - * LIBS: list of special libraries to include at link step (REMOVE THIS LINE IF NOT NEEDED) - * - * AUTHOR: your name and - */ - -#include "top.h" -#include "machine.h" - - -/* - * These definitions control the format of the per-process area - */ - -static char header[] = - " PID X PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND"; -/* 0123456 -- field to fill in starts at header+6 */ -#define UNAME_START 6 - -#define Proc_format \ - "%5d %-8.8s %3d %4d%6dK %4dK %-5s%4d:%02d %5.2f%% %5.2f%% %.14s" - -/* these are for detailing the process states */ - -int process_states[?]; -char *procstatenames[] = { - "", " sleeping, ", " ABANDONED, ", " running, ", " starting, ", - " zombie, ", " stopped, ", - NULL -}; - -/* these are for detailing the cpu states */ - -int cpu_states[?]; -char *cpustatenames[] = { - "user", "nice", "system", "idle", - NULL -}; - -/* these are for detailing the memory statistics */ - -int memory_stats[?]; -char *memorynames[] = { - "K available, ", "K in use, ", "K free, ", "K locked", NULL -}; - -/* useful externals */ -extern int errno; -extern char *sys_errlist[]; - -long lseek(); -long time(); -long percentages(); - -machine_init(statics) - -struct statics *statics; - -{ - return(0); -} - -char *format_header(uname_field) - -register char *uname_field; - -{ - register char *ptr; - - ptr = header + UNAME_START; - while (*uname_field != '\0') - { - *ptr++ = *uname_field++; - } - - return(header); -} - -get_system_info(si) - -struct system_info *si; - -{ -} - -static struct handle handle; - -caddr_t get_process_info(si, sel, compare) - -struct system_info *si; -struct process_select *sel; -int (*compare)(); - -{ - return((caddr_t)&handle); -} - -char fmt[128]; /* static area where result is built */ - -/* define what weighted cpu is. */ -#define weighted_cpu(pct, pp) ((pp)->p_time == 0 ? 0.0 : \ - ((pct) / (1.0 - exp((pp)->p_time * logcpu)))) - -char *format_next_process(handle, get_userid) - -caddr_t handle; -char *(*get_userid)(); - -{ - return(fmt); -} - -/* - * getkval(offset, ptr, size, refstr) - get a value out of the kernel. - * "offset" is the byte offset into the kernel for the desired value, - * "ptr" points to a buffer into which the value is retrieved, - * "size" is the size of the buffer (and the object to retrieve), - * "refstr" is a reference string used when printing error meessages, - * if "refstr" starts with a '!', then a failure on read will not - * be fatal (this may seem like a silly way to do things, but I - * really didn't want the overhead of another argument). - * - */ - -getkval(offset, ptr, size, refstr) - -unsigned long offset; -int *ptr; -int size; -char *refstr; - -{ - if (kvm_read(kd, offset, ptr, size) != size) - { - if (*refstr == '!') - { - return(0); - } - else - { - fprintf(stderr, "top: kvm_read for %s: %s\n", - refstr, sys_errlist[errno]); - quit(23); - } - } - return(1); -} - -/* comparison routine for qsort */ -/* NOTE: this is specific to the BSD proc structure, but it should - give you a good place to start. */ - -/* - * proc_compare - comparison function for "qsort" - * Compares the resource consumption of two processes using five - * distinct keys. The keys (in descending order of importance) are: - * percent cpu, cpu ticks, state, resident set size, total virtual - * memory usage. The process states are ordered as follows (from least - * to most important): WAIT, zombie, sleep, stop, start, run. The - * array declaration below maps a process state index into a number - * that reflects this ordering. - */ - -static unsigned char sorted_state[] = -{ - 0, /* not used */ - 3, /* sleep */ - 1, /* ABANDONED (WAIT) */ - 6, /* run */ - 5, /* start */ - 2, /* zombie */ - 4 /* stop */ -}; - -proc_compare(pp1, pp2) - -struct proc **pp1; -struct proc **pp2; - -{ - register struct proc *p1; - register struct proc *p2; - register int result; - register pctcpu lresult; - - /* remove one level of indirection */ - p1 = *pp1; - p2 = *pp2; - - /* compare percent cpu (pctcpu) */ - if ((lresult = p2->p_pctcpu - p1->p_pctcpu) == 0) - { - /* use cpticks to break the tie */ - if ((result = p2->p_cpticks - p1->p_cpticks) == 0) - { - /* use process state to break the tie */ - if ((result = sorted_state[p2->p_stat] - - sorted_state[p1->p_stat]) == 0) - { - /* use priority to break the tie */ - if ((result = p2->p_pri - p1->p_pri) == 0) - { - /* use resident set size (rssize) to break the tie */ - if ((result = p2->p_rssize - p1->p_rssize) == 0) - { - /* use total memory to break the tie */ - result = PROCSIZE(p2) - PROCSIZE(p1); - } - } - } - } - } - else - { - result = lresult < 0 ? -1 : 1; - } - - return(result); -} - -proc_owner(pid) - -int pid; - -{ - /* returns uid of owner of process pid */ - return(uid); -} - diff --git a/contrib/top/metatop b/contrib/top/metatop deleted file mode 100755 index 88a787c34f82..000000000000 --- a/contrib/top/metatop +++ /dev/null @@ -1,25 +0,0 @@ -#! /bin/sh -# -# Top is very sensitive to differences in the kernel, so much so that an -# executable created on one sub-architecture may not work on others. It -# is also quite common for a minor OS revision to require recompilation of -# top. Both of these problems are especially prevalent on Suns. For -# example, a top executable made under SunOS 4.1.1 will not run correctly -# under SunOS 4.1.2, and vice versa. "metatop" attempts to solve this -# problem by choosing one of several possible top executables to run then -# executing it. -# -# To use metatop your operating system needs to have the command "uname" -# as part of the standard OS release. MAKE SURE IT DOES before proceeding. -# It will try to execute the command "top-`uname -m`-`uname -r`" For -# example, on a sparcstation 1 running SunOS 4.1.1, it will try to run -# "top-sun4c-4.1.1". -# -# INSTALLATION is easy. Just compile top as normal. Then use the command -# "make metainstall" (on the same machine!) instead of the usual. "make" -# will insure that this shell script is installed correctly then will install -# the most recently made top executable with the correct name. Remember: -# you will need to "make clean" and "make metainstall" on every different -# combination of sub-architecture and OS version that you have. -# -exec $0-`uname -m`-`uname -r` "$@" diff --git a/usr.bin/top/Makefile b/usr.bin/top/Makefile index 9ec95dccc0ad..8729c740c50c 100644 --- a/usr.bin/top/Makefile +++ b/usr.bin/top/Makefile @@ -1,36 +1,21 @@ # $FreeBSD$ -TOPDIR= ${SRCTOP}/contrib/top -.PATH: ${TOPDIR} - PROG= top SRCS= commands.c display.c machine.c screen.c top.c \ - username.c utils.c version.c + username.c utils.c version.c SRCS+= sigdesc.h top.local.h -CFLAGS+= -DHAVE_GETOPT -DHAVE_STRERROR -DORDER -CFLAGS+= -I${.CURDIR} -I${TOPDIR} -I. +CFLAGS+= -DHAVE_GETOPT -DHAVE_STRERROR -DORDER -I ${.OBJDIR} +MAN= top.1 WARNS?= 0 -# -# The table size should be a prime number approximately twice as -# large as the number of lines in /etc/passwd. The default number -# is 20011; use /etc/make.conf to override this. -# -.if defined(TOP_TABLE_SIZE) -CFLAGS+= -D"Table_size=${TOP_TABLE_SIZE}" -.endif - LIBADD= ncursesw m kvm jail CLEANFILES= sigdesc.h -SIGCONV_AWK= ${SRCTOP}/contrib/top/sigconv.awk -STAGED_INCLUDE_DIR?= ${DESTDIR}/usr/include -SIGNAL_H= ${STAGED_INCLUDE_DIR}/sys/signal.h -sigdesc.h: ${SIGCONV_AWK} ${SIGNAL_H} - awk -f ${SIGCONV_AWK} < ${SIGNAL_H} > ${.TARGET} +SIGNAL_H= ${SRCTOP}/sys/sys/signal.h +sigdesc.h: sigconv.awk ${SIGNAL_H} + awk -f ${SRCTOP}/usr.bin/top/sigconv.awk < ${SIGNAL_H} > ${.TARGET} -CLEANFILES+= top.local.h top.x .SUFFIXES: .xs .x .hs .h .xs.x .hs.h: @${ECHO} Making ${.TARGET} from ${.IMPSRC} @@ -42,8 +27,4 @@ CLEANFILES+= top.local.h top.x -e's,%random%,1,g' \ ${.IMPSRC} > ${.TARGET} -CLEANFILES+= top.1 -top.1: top.x top.local.1 - cat ${.ALLSRC} > ${.TARGET} - .include diff --git a/contrib/top/boolean.h b/usr.bin/top/boolean.h similarity index 100% rename from contrib/top/boolean.h rename to usr.bin/top/boolean.h diff --git a/contrib/top/commands.c b/usr.bin/top/commands.c similarity index 100% rename from contrib/top/commands.c rename to usr.bin/top/commands.c diff --git a/contrib/top/commands.h b/usr.bin/top/commands.h similarity index 100% rename from contrib/top/commands.h rename to usr.bin/top/commands.h diff --git a/contrib/top/display.c b/usr.bin/top/display.c similarity index 100% rename from contrib/top/display.c rename to usr.bin/top/display.c diff --git a/contrib/top/display.h b/usr.bin/top/display.h similarity index 100% rename from contrib/top/display.h rename to usr.bin/top/display.h diff --git a/contrib/top/getopt.c b/usr.bin/top/getopt.c similarity index 100% rename from contrib/top/getopt.c rename to usr.bin/top/getopt.c diff --git a/contrib/top/layout.h b/usr.bin/top/layout.h similarity index 100% rename from contrib/top/layout.h rename to usr.bin/top/layout.h diff --git a/contrib/top/loadavg.h b/usr.bin/top/loadavg.h similarity index 100% rename from contrib/top/loadavg.h rename to usr.bin/top/loadavg.h diff --git a/contrib/top/machine.h b/usr.bin/top/machine.h similarity index 100% rename from contrib/top/machine.h rename to usr.bin/top/machine.h diff --git a/contrib/top/os.h b/usr.bin/top/os.h similarity index 100% rename from contrib/top/os.h rename to usr.bin/top/os.h diff --git a/contrib/top/patchlevel.h b/usr.bin/top/patchlevel.h similarity index 100% rename from contrib/top/patchlevel.h rename to usr.bin/top/patchlevel.h diff --git a/contrib/top/prime.c b/usr.bin/top/prime.c similarity index 100% rename from contrib/top/prime.c rename to usr.bin/top/prime.c diff --git a/contrib/top/screen.c b/usr.bin/top/screen.c similarity index 100% rename from contrib/top/screen.c rename to usr.bin/top/screen.c diff --git a/contrib/top/screen.h b/usr.bin/top/screen.h similarity index 100% rename from contrib/top/screen.h rename to usr.bin/top/screen.h diff --git a/contrib/top/sigconv.awk b/usr.bin/top/sigconv.awk similarity index 100% rename from contrib/top/sigconv.awk rename to usr.bin/top/sigconv.awk diff --git a/usr.bin/top/top.1 b/usr.bin/top/top.1 new file mode 100644 index 000000000000..2a7b2051d795 --- /dev/null +++ b/usr.bin/top/top.1 @@ -0,0 +1,543 @@ +.\" NOTE: changes to the manual page for "top" should be made in the +.\" file "top.X" and NOT in the file "top.1". +.\" $FreeBSD$ +.nr N -1 +.nr D 2 +.TH TOP 1 Local +.UC 4 +.SH NAME +top \- display and update information about the top cpu processes +.SH SYNOPSIS +.B top +[ +.B \-abCHIijnPqStuvwz +] [ +.BI \-d count +] [ +.BI \-m io | cpu +] [ +.BI \-o field +] [ +.BI \-s time +] [ +.BI \-J jail +] [ +.BI \-U username +] [ +.I number +] +.SH DESCRIPTION +.\" This defines appropriate quote strings for nroff and troff +.ds lq \&" +.ds rq \&" +.if t .ds lq `` +.if t .ds rq '' +.\" Just in case these number registers aren't set yet... +.if \nN==0 .nr N 10 +.if \nD==0 .nr D 2 +.I Top +displays the top +.if !\nN==-1 \nN +processes on the system and periodically updates this information. +.if \nN==-1 \ +\{\ +If standard output is an intelligent terminal (see below) then +as many processes as will fit on the terminal screen are displayed +by default. Otherwise, a good number of them are shown (around 20). +.\} +Raw cpu percentage is used to rank the processes. If +.I number +is given, then the top +.I number +processes will be displayed instead of the default. +.PP +.I Top +makes a distinction between terminals that support advanced capabilities +and those that do not. This +distinction affects the choice of defaults for certain options. In the +remainder of this document, an \*(lqintelligent\*(rq terminal is one that +supports cursor addressing, clear screen, and clear to end of line. +Conversely, a \*(lqdumb\*(rq terminal is one that does not support such +features. If the output of +.I top +is redirected to a file, it acts as if it were being run on a dumb +terminal. +.SH OPTIONS +.TP +.B \-C +Toggle CPU display mode. +By default top displays the weighted CPU percentage in the WCPU column +(this is the same value that +.IR ps (1) +displays as CPU). +Each time +.B \-C +flag is passed it toggles between \*(lqraw cpu\*(rq mode +and \*(lqweighted cpu\*(rq mode, showing the \*(lqCPU\*(rq or +the \*(lqWCPU\*(rq column respectively. +.TP +.B \-S +Show system processes in the display. Normally, system processes such as +the pager and the swapper are not shown. This option makes them visible. +.TP +.B \-a +Display command names derived from the argv[] vector, rather than real +executable name. It's useful when you want to watch applications, that +puts their status information there. If the real name differs from argv[0], +it will be displayed in parenthesis. +.TP +.B \-b +Use \*(lqbatch\*(rq mode. In this mode, all input from the terminal is +ignored. Interrupt characters (such as ^C and ^\e) still have an effect. +This is the default on a dumb terminal, or when the output is not a terminal. +.TP +.B \-H +Display each thread for a multithreaded process individually. +By default a single summary line is displayed for each process. +.TP +.B \-i +Use \*(lqinteractive\*(rq mode. In this mode, any input is immediately +read for processing. See the section on \*(lqInteractive Mode\*(rq +for an explanation of +which keys perform what functions. After the command is processed, the +screen will immediately be updated, even if the command was not +understood. This mode is the default when standard output is an +intelligent terminal. +.TP +.B \-I +Do not display idle processes. +By default, top displays both active and idle processes. +.TP +.B \-j +Display the +.IR jail (8) +ID. +.TP +.B \-t +Do not display the +.I top +process. +.TP +.BI \-m display +Display either 'cpu' or 'io' statistics. Default is 'cpu'. +.TP +.B \-n +Use \*(lqnon-interactive\*(rq mode. This is identical to \*(lqbatch\*(rq +mode. +.TP +.B \-P +Display per-cpu CPU usage statistics. +.TP +.B \-q +Renice +.I top +to -20 so that it will run faster. This can be used when the system is +being very sluggish to improve the possibility of discovering the problem. +This option can only be used by root. +.TP +.B \-u +Do not take the time to map uid numbers to usernames. Normally, +.I top +will read as much of the file \*(lq/etc/passwd\*(rq as is necessary to map +all the user id numbers it encounters into login names. This option +disables all that, while possibly decreasing execution time. The uid +numbers are displayed instead of the names. +.TP +.B \-v +Write version number information to stderr then exit immediately. +No other processing takes place when this option is used. To see current +revision information while top is running, use the help command \*(lq?\*(rq. +.TP +.B \-w +Display approximate swap usage for each process. +.TP +.B \-z +Do not display the system idle process. +.TP +.BI \-d count +Show only +.I count +displays, then exit. A display is considered to be one update of the +screen. This option allows the user to select the number of displays he +wants to see before +.I top +automatically exits. For intelligent terminals, no upper limit +is set. The default is 1 for dumb terminals. +.TP +.BI \-s time +Set the delay between screen updates to +.I time +seconds. The default delay between updates is \nD seconds. +.TP +.BI \-o field +Sort the process display area on the specified field. The field name +is the name of the column as seen in the output, but in lower case: +\*(lqcpu\*(lq, \*(rqsize\*(lq, \*(rqres\*(lq, \*(rqtime\*(lq, +\*(rqpri\*(lq, \*(rqthreads\*(lq, \*(lqtotal\*(lq, \*(rqread\*(lq, +\*(rqwrite\*(lq, \*(rqfault\*(lq, \*(rqvcsw\*(lq, \*(rqivcsw\*(lq, +\*(lqjid\*(lq, \*(rqswap\*(lq or \*(rqpid\*(lq. +.TP +.BI \-J jail +Show only those processes owned by +.IR jail . +This may be either the +.B jid +or +.B name +of the jail. +Use +.B 0 +to limit to host processes. +Using this option implies the +.B \-j +flag. +.PP +.BI \-U username +Show only those processes owned by +.IR username . +This option currently only accepts usernames and will not understand +uid numbers. +.PP +Both +.I count +and +.I number +fields can be specified as \*(lqinfinite\*(rq, indicating that they can +stretch as far as possible. This is accomplished by using any proper +prefix of the keywords +\*(lqinfinity\*(rq, +\*(lqmaximum\*(rq, +or +\*(lqall\*(rq. +The default for +.I count +on an intelligent terminal is, in fact, +.BI infinity . +.PP +The environment variable +.B TOP +is examined for options before the command line is scanned. This enables +a user to set his or her own defaults. The number of processes to display +can also be specified in the environment variable +.BR TOP . +The options +.BR \-a , +.BR \-C , +.BR \-H , +.BR \-I , +.BR \-j , +.BR \-P , +.BR \-S , +.BR \-t , +.BR \-u , +.BR \-w , +and +.B \-z +are actually toggles. A second specification of any of these options +will negate the first. Thus a user who has the environment variable +.B TOP +set to \*(lq\-I\*(rq may use the command \*(lqtop \-I\*(rq to see idle processes. +.SH "INTERACTIVE MODE" +When +.I top +is running in \*(lqinteractive mode\*(rq, it reads commands from the +terminal and acts upon them accordingly. In this mode, the terminal is +put in \*(lqCBREAK\*(rq, so that a character will be +processed as soon as it is typed. Almost always, a key will be +pressed when +.I top +is between displays; that is, while it is waiting for +.I time +seconds to elapse. If this is the case, the command will be +processed and the display will be updated immediately thereafter +(reflecting any changes that the command may have specified). This +happens even if the command was incorrect. If a key is pressed while +.I top +is in the middle of updating the display, it will finish the update and +then process the command. Some commands require additional information, +and the user will be prompted accordingly. While typing this information +in, the user's erase and kill keys (as set up by the command +.IR stty ) +are recognized, and a newline terminates the input. +.PP +These commands are currently recognized (^L refers to control-L): +.TP +.B ^L +Redraw the screen. +.IP "\fBh\fP\ or\ \fB?\fP" +Display a summary of the commands (help screen). Version information +is included in this display. +.TP +.B q +Quit +.IR top. +.TP +.B d +Change the number of displays to show (prompt for new number). +Remember that the next display counts as one, so typing +.B d1 +will make +.I top +show one final display and then immediately exit. +.TP +.B m +Toggle the display between 'cpu' and 'io' modes. +.TP +.B n or # +Change the number of processes to display (prompt for new number). +.TP +.B s +Change the number of seconds to delay between displays +(prompt for new number). +.TP +.B S +Toggle the display of system processes. +.TP +.B a +Toggle the display of process titles. +.TP +.B k +Send a signal (\*(lqkill\*(rq by default) to a list of processes. This +acts similarly to the command +.IR kill (1)). +.TP +.B r +Change the priority (the \*(lqnice\*(rq) of a list of processes. +This acts similarly to the command +.IR renice (8)). +.TP +.B u +Display only processes owned by a specific set of usernames (prompt for +username). If the username specified is simply \*(lq+\*(rq or \*(lq-\*(rq, +then processes belonging to all users will be displayed. Usernames can be added +to and removed from the set by prepending them with \*(lq+\*(rq and +\*(lq-\*(rq, respectively. +.TP +.B o +Change the order in which the display is sorted. This command is not +available on all systems. The sort key names vary from system to system +but usually include: \*(lqcpu\*(rq, \*(lqres\*(rq, \*(lqsize\*(rq, +\*(lqtime\*(rq. The default is cpu. +.TP +.B e +Display a list of system errors (if any) generated by the last +.BR k ill +or +.BR r enice +command. +.TP +.B H +Toggle the display of threads. +.TP +.B i +(or +.BR I ) +Toggle the display of idle processes. +.TP +.B j +Toggle the display of +.IR jail (8) +ID. +.TP +.B J +Display only processes owned by a specific jail (prompt for jail). +If the jail specified is simply \*(lq+\*(rq, then processes belonging +to all jails and the host will be displayed. +This will also enable the display of JID. +.TP +.B P +Toggle the display of per-CPU statistics. +.TP +.B t +Toggle the display of the +.I top +process. +.TP +.B w +Toggle the display of swap usage. +.TP +.B z +Toggle the display of the system idle process. +.SH "THE DISPLAY" +The actual display varies depending on the specific variant of Unix +that the machine is running. This description may not exactly match +what is seen by top running on this particular machine. Differences +are listed at the end of this manual entry. +.PP +The top few lines of the display show general information +about the state of the system, including +the last process id assigned to a process (on most systems), +the three load averages, +the current time, +the number of existing processes, +the number of processes in each state +(sleeping, running, starting, zombies, and stopped), +and a percentage of time spent in each of the processor states +(user, nice, system, and idle). +It also includes information about physical and virtual memory allocation. +.PP +The remainder of the screen displays information about individual +processes. This display is similar in spirit to +.IR ps (1) +but it is not exactly the same. PID is the process id, +JID, when displayed, is the +.IR jail (8) +ID corresponding to the process, +USERNAME is the name of the process's owner (if +.B \-u +is specified, a UID column will be substituted for USERNAME), +PRI is the current priority of the process, +NICE is the nice amount (in the range \-20 to 20), +SIZE is the total size of the process (text, data, and stack), +RES is the current amount of resident memory, +SWAP is the approximate amount of swap, if enabled +(SIZE, RES and SWAP are given in kilobytes), +STATE is the current state (one of \*(lqSTART\*(rq, \*(lqRUN\*(rq +(shown as \*(lqCPUn\*(rq on SMP systems), \*(lqSLEEP\*(rq, \*(lqSTOP\*(rq, +\*(lqZOMB\*(rq, \*(lqWAIT\*(rq, \*(lqLOCK\*(rq or the event on which the +process waits), +C is the processor number on which the process is executing +(visible only on SMP systems), +TIME is the number of system and user cpu seconds that the process has used, +WCPU, when displayed, is the weighted cpu percentage (this is the same +value that +.IR ps (1) +displays as CPU), +CPU is the raw percentage and is the field that is sorted to determine +the order of the processes, and +COMMAND is the name of the command that the process is currently running +(if the process is swapped out, this column is marked \*(lq\*(rq). +.SH NOTES +If a process is in the \*(lqSLEEP\*(rq or \*(lqLOCK\*(rq state, +the state column will report the name of the event or lock on which the +process is waiting. +Lock names are prefixed with an asterisk \*(lq*\*(rq while sleep events +are not. +.SH AUTHOR +William LeFebvre, EECS Department, Northwestern University +.SH ENVIRONMENT +.DT +TOP user-configurable defaults for options. +.SH FILES +.DT +/dev/kmem kernel memory +.br +/dev/mem physical memory +.br +/etc/passwd used to map uid numbers to user names +.br +/boot/kernel/kernel system image +.SH BUGS +Don't shoot me, but the default for +.B \-I +has changed once again. So many people were confused by the fact that +.I top +wasn't showing them all the processes that I have decided to make the +default behavior show idle processes, just like it did in version 2. +But to appease folks who can't stand that behavior, I have added the +ability to set \*(lqdefault\*(rq options in the environment variable +.B TOP +(see the OPTIONS section). Those who want the behavior that version +3.0 had need only set the environment variable +.B TOP +to \*(lq\-I\*(rq. +.PP +The command name for swapped processes should be tracked down, but this +would make the program run slower. +.PP +As with +.IR ps (1), +things can change while +.I top +is collecting information for an update. The picture it gives is only a +close approximation to reality. +.SH "SEE ALSO" +kill(1), +ps(1), +stty(1), +mem(4), +renice(8) +.\" $FreeBSD$ +.SH "FreeBSD NOTES" + +.SH DESCRIPTION OF MEMORY +Mem: 61M Active, 86M Inact, 368K Laundry, 22G Wired, 102G Free +ARC: 15G Total, 9303M MFU, 6155M MRU, 1464K Anon, 98M Header, 35M Other + 15G Compressed, 27G Uncompressed, 1.75:1 Ratio, 174M Overhead +Swap: 4096M Total, 532M Free, 13% Inuse, 80K In, 104K Out +.TP +.B K: +Kilobyte +.TP +.B M: +Megabyte +.TP +.B G: +Gigabyte +.TP +.B %: +1/100 +.SS Physical Memory Stats +.TP +.B Active: +number of bytes active +.TP +.B Inact: +number of clean bytes inactive +.TP +.B Laundry: +number of dirty bytes queued for laundering +.TP +.B Wired: +number of bytes wired down, including BIO-level cached file data pages +.TP +.B Buf: +number of bytes used for BIO-level disk caching +.TP +.B Free: +number of bytes free +.SS ZFS ARC Stats +These stats are only displayed when the ARC is in use. +.TP +.B Total: +number of wired bytes used for the ZFS ARC +.TP +.B MRU: +number of ARC bytes holding most recently used data +.TP +.B MFU: +number of ARC bytes holding most frequently used data +.TP +.B Anon: +number of ARC bytes holding in flight data +.TP +.B Header: +number of ARC bytes holding headers +.TP +.B Other: +miscellaneous ARC bytes +.TP +.B Compressed: +bytes of memory used by ARC caches +.TP +.B Uncompressed: +bytes of data stored in ARC caches before compression +.TP +.B Ratio: +compression ratio of data cached in the ARC +.SS Swap Stats +.TP +.B Total: +total available swap usage +.TP +.B Free: +total free swap usage +.TP +.B Inuse: +swap usage +.TP +.B In: +bytes paged in from swap devices (last interval) +.TP +.B Out: +bytes paged out to swap devices (last interval) diff --git a/contrib/top/top.c b/usr.bin/top/top.c similarity index 100% rename from contrib/top/top.c rename to usr.bin/top/top.c diff --git a/contrib/top/top.h b/usr.bin/top/top.h similarity index 100% rename from contrib/top/top.h rename to usr.bin/top/top.h diff --git a/usr.bin/top/top.local.1 b/usr.bin/top/top.local.1 deleted file mode 100644 index eb4035395e88..000000000000 --- a/usr.bin/top/top.local.1 +++ /dev/null @@ -1,84 +0,0 @@ -.\" $FreeBSD$ -.SH "FreeBSD NOTES" - -.SH DESCRIPTION OF MEMORY -Mem: 61M Active, 86M Inact, 368K Laundry, 22G Wired, 102G Free -ARC: 15G Total, 9303M MFU, 6155M MRU, 1464K Anon, 98M Header, 35M Other - 15G Compressed, 27G Uncompressed, 1.75:1 Ratio, 174M Overhead -Swap: 4096M Total, 532M Free, 13% Inuse, 80K In, 104K Out -.TP -.B K: -Kilobyte -.TP -.B M: -Megabyte -.TP -.B G: -Gigabyte -.TP -.B %: -1/100 -.SS Physical Memory Stats -.TP -.B Active: -number of bytes active -.TP -.B Inact: -number of clean bytes inactive -.TP -.B Laundry: -number of dirty bytes queued for laundering -.TP -.B Wired: -number of bytes wired down, including BIO-level cached file data pages -.TP -.B Buf: -number of bytes used for BIO-level disk caching -.TP -.B Free: -number of bytes free -.SS ZFS ARC Stats -These stats are only displayed when the ARC is in use. -.TP -.B Total: -number of wired bytes used for the ZFS ARC -.TP -.B MRU: -number of ARC bytes holding most recently used data -.TP -.B MFU: -number of ARC bytes holding most frequently used data -.TP -.B Anon: -number of ARC bytes holding in flight data -.TP -.B Header: -number of ARC bytes holding headers -.TP -.B Other: -miscellaneous ARC bytes -.TP -.B Compressed: -bytes of memory used by ARC caches -.TP -.B Uncompressed: -bytes of data stored in ARC caches before compression -.TP -.B Ratio: -compression ratio of data cached in the ARC -.SS Swap Stats -.TP -.B Total: -total available swap usage -.TP -.B Free: -total free swap usage -.TP -.B Inuse: -swap usage -.TP -.B In: -bytes paged in from swap devices (last interval) -.TP -.B Out: -bytes paged out to swap devices (last interval) diff --git a/contrib/top/top.local.hs b/usr.bin/top/top.local.hs similarity index 100% rename from contrib/top/top.local.hs rename to usr.bin/top/top.local.hs diff --git a/contrib/top/top.xs b/usr.bin/top/top.xs similarity index 100% rename from contrib/top/top.xs rename to usr.bin/top/top.xs diff --git a/contrib/top/username.c b/usr.bin/top/username.c similarity index 100% rename from contrib/top/username.c rename to usr.bin/top/username.c diff --git a/contrib/top/username.h b/usr.bin/top/username.h similarity index 100% rename from contrib/top/username.h rename to usr.bin/top/username.h diff --git a/contrib/top/utils.c b/usr.bin/top/utils.c similarity index 100% rename from contrib/top/utils.c rename to usr.bin/top/utils.c diff --git a/contrib/top/utils.h b/usr.bin/top/utils.h similarity index 100% rename from contrib/top/utils.h rename to usr.bin/top/utils.h diff --git a/contrib/top/version.c b/usr.bin/top/version.c similarity index 100% rename from contrib/top/version.c rename to usr.bin/top/version.c