NEWS: what has changed recently with procps, in reverse cronological order. Please send bug reports to procps-bugs@redhat.com NEWS for version 2.0.7 of procps SMP support has been added to top. This adds one line to the screen for every processor. There is also an (off by default) field to show the last processor that a process used that replaced the long-dead LIB field. Please send feedback, positive and negative, on these changes to procps-bugs@redhat.com The libproc soname has changed to 2.0.7 because of a structure change required to add SMP support. Two programs inspired by Solaris's /usr/proc/bin collection have been added: pgrep and pkill. By default, for FSSTND/FHS/LSB compliance, these are installed in /usr/bin; if you want, you can change PROCDIR in Makefile to move them. You can also make a symlink from /usr/proc/bin to /usr/bin if you like. The Makefiles have been sanitized a bit more; they are now less messy than they were. There is less duplication between the Makefiles now. The man pages that use tables have been fixed to work work broken versions of man. The old wmconfig file (specific to Red Hat) has been replaced with a desktop file (common across GNOME and KDE). sysctl returns an error code in a condition in which it didn't before, and handles EOF correctly. top now only loads System.map when it is actually going to make use of it. vmstat has its buffer size increased and handles page size dynamically. w has its year display fixed to show the year 2000 as 00 instead of 0, and to try harder to find a process to display. watch has a fix for ncurses in recent versions of glibc, and expands tabs so that they display correctly. libproc tries to get the default page size from the system header files, but still has a fallback. It also has been extended to allow applications to handle their own error reporting in some important cases. The pwcache has been expanded in size to correctly handle user names longer than 8 characters. It has been expanded to provide the lproc field that shows up as top's LC field. A segfault when /proc is not mounted was fixed. Missing files will cause applications to exit with an error code instead of good exit code. A warning when libproc cannot calculate the HZ value (probably due to a kernel bug) has been supressed by default because it broke people's scripts unnecessarily. A 64-bit memory size reading bug was fixed (/proc/meminfo was read incorrectly). A couple of error messages in ps had newlines added to them. ps only opens System.map when it is going to make use of it. The full-page error message has been replaced with a shorter usage message; the full-page command summary is available with --help, and the usage message tells about --help; the full-page summary is now no longer an error message and so it is sent to stdout insteada of stderr. Processes with run times longer than a day now have their runtime displayed correctly. ruser output was fixed. An attempt was made to support one more piece of BSD syntax in the command line arguments, where pids can follow options with no intervening space. The ps man page was made a bit more internally consistent and typos fixed. Fixed a segfault when the PS_FORMAT environment variable was set wrong. NEWS for version 2.0.6 of procps Support for large-memory systems has been added. LIBVERSION has been incremented because of an incompatible change in the libproc interface, necessitated by the large-memory support. A little more error checking in device idle time calculations. The signames.h file is now properly built. Fixed an almost-impossible file descriptor leak in libproc that occasionally showed up in long-running top sessions. The fix for top no longer depending on NR_TASKS in 2.0.5 was broken; top would die with more than 204 tasks. This has been fixed. NEWS for version 2.0.5 of procps procps can build against the 2.3.18 kernel source; top no longer depends on NR_TASKS. skill/snice no longer complain on Linux/SPARC sysctl no longer segfaults with -A; has a few parsing fixes NEWS for version 2.0.4 of procps sysctl can save/restore settings using /etc/sysctl.conf file top has -p option and N and A commands. vmstat doesn't mind interrupt counter overflow on long-running machines ps can now sort by PCPU. NEWS for version 2.0.3 of procps Time calculations fixed (or at least improved...) for SMP machines. In particular, hertz is calculated correctly. ps doesn't mind terminal resizing happening while it runs. sysctl is a nifty new program! Try it! Carefully! :-) w PCPU and WHAT output fixed. top batch mode now works without a tty (for instance, via rsh). new version of watch has a few new features like --differences. sessreg removed; it belongs where it has been for a long time, in X. NEWS for version 2.0.2 of procps Removed xproc entirely; the only thing left there was XConsole, which was equivalent to xconsole -file /proc/kmsg. Added an XConsole shell script which does exec xconsole -file /proc/kmsg "$@" so that folks who depend on XConsole won't be left behind. This also fixes the bug that XConsole effectively removed limitations on which users were allowed to read /proc/kmsg without root having much choice in the matter other than to remove XConsole... Removed unused psupdate code (still available as part of procps-1.2.x for anyone who wants to play with it). Removed sessreg, as it is included in XFree86 and there is no reason for the duplication. Fixed version number generation so that it happens in one place. I'm tired of releasing versions that misreport their version number... NEWS for version 2.0.1 of procps Reverted my changes that had broken Albert's Unix98 compliance. Major bugs fixed: o ps now returns failure for "ps " o ps h has reverted to old linux behaviour except in BSD personality; --headers and --no-headers long options have been added o watch buffer overrun fixed (no, not a security hole). top has -b and -n options added. NEWS for version 2.0 of procps Thanks to Albert Cahalan for his rewrite of ps, and for making the time for new development of ps that I just didn't have. His research into how ps worked on lots of different UNIX systems really made this version much more usable for a lot of people. Read ALL of Albert's comments regarding his 1.9.0 release. If you do not, you may be surprised when scripts fail. I've tried to prepare people for the worst of this by giving out the much-detested warning: `-' deprecated; use `ps aux', not `ps -aux' message for roughly a year and a half. NEWS for version 1.9.0 of procps The ps command now supports simultaneous BSD and Unix98 syntax. There have been many other changes in ps. (complete rewrite) Red Hat users should check /etc/sysconfig/network-scripts/ifdown-ppp for the bogus command "ps aul" and change it to "ps axl". Scripts that make assumptions about character position are and were broken because fields may overflow. Scripts should parse by whitespace and use -o to get the best results. Command names for swapped out processes are now shown in square brackets instead of parentheses, as required by the Unix98 standard. This problem can be avoided entirely by using a SysV format without -f, using the BSD "c" option, or using the format specifier "comm" with -o. Some uses of ps in /etc/rc.d/init.d/functions should probably eventually be changed to stuff somewhat like the following, which would eliminate the need for awk: PS_PERSONALITY=linux dead=`ps -p $pid -o pid=` PS_PERSONALITY=linux echo -n `ps -C $1 -o pid=` PS_PERSONALITY=linux pid=`ps -C $1 -o pid=` Obsolete files you may have: /etc/psdatabase, /etc/psdevtab, ~/.psdevtab, /usr/man/man8/psupdate.8 and /usr/sbin/psupdate. NEWS for version 1.2.9 of procps psupdate has been REMOVED from the default install. You can put it back if you want to by removing two comment characters in the Makefile, but I'm not going to tell you which ones. If you can't figure it out, there's a good chance that it won't build on your machine and I don't want the bug reports. One of the main reasons I have removed it is that it is not necessary on a properly-maintained system (that is, System.map exists and is correct) and 4/5ths of the bug reports I have fielded in the past are from users who are not able to maintain a working system complaining that it doesn't work, despite the fact that the INSTALL file explains how to build it in different ways and how to disable it. I will delete without response all email asking me how to build psupdate. ps now accepts and ignores the g option for those with fingers tied to the g key from too much exposure to BSD. :-) Should build properly on ultrasparc -- two people sent the patch and the second time I didn't notice that the patch went in reverted. So I have now reverted the reverted patch to get the right behavior. More reliable command-line parsing in vmstat has been added. If vmstat didn't die for you before, you won't notice the difference... Fixed a bug where arbitrary users might have been able to corrupt the screen of arbitrary other users running top by creating processes with weird arguments. "ps ce" was missing a space character; fixed. NEWS for version 1.2.8 of procps procps.spec now uses buildroot, and can be built by non-root users. This means that the default install targets had to change in the makefiles so that the default install does not require root privs otherwise. Also changed all "bin" ownership to "root" ownership, as kmem-ps has died out and folks won't be automatically doing "chmod u+s /bin/ps" and making their systems insecure thereby. XConsole no longer installed setuid root by default. This is safer, if less convenient. Change it if you want to use it as non-root. top had disgustingly buggy ^Z handling: you could only suspend once, and if you had suspended, you could no longer read WCHAN information. Both bugs are now fixed. xcpustate removed -- it was a very old, obsolete version. Get a new version from ftp://ftp.cs.toronto.edu/pub/jdd/xcpustate Now looks for kernel symbols in loadable modules. psupdate no longer included in RPM package; the theory is that systems maintained with RPM probably are reasonably recent and up-to-date and so psupdate is extraneous on those systems, only adding an unhelpful dependency on a particular version of binutils. top printed two spaces instead of just one between command-line arguments. NEWS for version 1.2.7 of procps Security hole in XConsole fixed. Works better with very long uptimes. Fixed RPM spec file to have correct libproc soname. skill -i works. Knows about more major numbers for smart serial boards. Fixed some small problems in top. NEWS for version 1.2.6 of procps Signal handling in top fixed in several ways. Main effect: suspending works correctly with glibc now. Patch from Linus for change in some kernel structures to 64-bit. This means that libproc has changed soname, as the proc_t data structure has changed incompatibly. File descriptor leaks in libproc were fixed. NEWS for version 1.2.5 of procps Potential security hole fixed: if there was no /etc/psdevtab on a system, a user could put a link from /tmp/psdevtab to a file owned by another user, and when that other user ran ps, the file it pointed to would be killed. This wouldn't work for root because root would be able to create /etc/psdevtab first, so arbitrary system files would not be killable. This was fixed by avoiding psdevtab files that are symlinks or have link counts higher than 1, and by not looking for /tmp/psdevtab anymore, as the reason for it to exist is really obsolete. w -s output has been fixed. Scripts that depend on w -s output should be examined. The output was broken enough to warrant this change; it was extremely buggy. NEWS for version 1.2.4 of procps I_WANT_A_BROKEN_PS environment variable turns off usage warning. "w " sense corrected. argument order problem fixed. XConsole doesn't dump core on exit any more (only fclose if the file is open...) NEWS for version 1.2.3 of procps psupdate moved to /usr/sbin, since it is no longer necessary. Added wmconfig for Red Hat systems (others can use it if they want; if/when wmconfig becomes standard, I'll move it into the install target of the makefile). Ugly hack to get around a problem some people were getting with a too-small variable. The usage message no longer recommends a deprecated syntax. :-) NEWS for version 1.2.2 of procps Made procps report its version number correctly. Fixed typo in w.1 man page. NEWS for version 1.2.1 of procps New address for bug reports against procps: procps-bugs@redhat.com (That's not an official service of Red Hat Software, just an alias for me so that bugs get filed properly where I don't lose them...) Better memory checks. Fixed a file descriptor leak. In top, the space key updates immediately. Fixed broken signal code in top. Fixed broken screen size calculations in top. Fixed broken user count calculations in top. Fixed broken time difference calculations in w. Link libproc against libc explicitly for better co-existance with libc. NEWS for version 1.2 of procps Original author/maintainer, Michael K. Johnson , has taken over maintenance again. psmisc removed, as it is better maintained separately. xload removed, as it is better maintained as part of XFree86. mknewpty removed, as it duplicates /dev/MAKEDEV and MAKEDEV is maintained. Support for 2.1.x kernels and for glibc 2.0.5. Lots of documentation updates. BFD support and shared library enabled by default. Binaries are no longer included in the archive -- get them from your favorite Linux distributor. free's display fixed in several ways: no such thing as cached swap, buffer+ display was incorrectly calculated, and buffer calculations didn't include cached memory. Removed mknewpty, because it wasn't perfect and collides with MAKEDEV. NEWS for version 1.01 of procps top bugfix release. Fixes memory leak, extra line after loadavg and broken no-idle mode. Also be a little more aggressive utmp 'from host' filtering in w. NEWS for version 1.00 of procps Fixed the ps -t without a -a segfault bug. Royal screwup on my part. Updated libproc parsing routine for the new vsize output as of 1.3.91-ish. Expanded the room for the FLAGS in ps -l due to high order bits now being set. Added a brand new top to the distribution. Highly run-time configurable. The old top is available for at least a release or so as "top.old". See the new man page for details, or just run it and type 'h'. This is courtesy of Helmut Geyer. Thanks Helmut! egrep -n '\<(tgetent|cm|top_clrtoeol|top_clrtobot|cl|ho|me|md|mr|tgoto)\>' on top.c and cleaned up all terminal strings being just dumped to stdout. All such strings are now tputs'd out with putchar. This should fix a lot of problems people have been having. Also cleaned up non-HZ based references to jiffies -> real time conversion. I may have missed one or two, though... Cleaned up some Makefile things. make distclean; make should really work now. removed function pointer warnings in xcpustate.c. .depend is properly removed as are the imake generated makefiles. Shared lib generation bug for libproc fixed. In general the build should be a lot cleaner, but may still have a glitch or two. Fixed a few (but probably not all) Alpha compatibility bugs dealing with memory alignment. Please let me know if I missed any, or if you like give me a test account on some Alpha. I don't have access to any Linux other than x86 which is notoriously forgiving about unaligned memory accesses. Thanks to Alfred Arnold (a.arnold@kfa-juelich.de) and Harald Koenig for their help so far with this. Completely (well almost) re-wrote 'w'. From on by default, J/PCPU display is accurate to 0.01s. w and top use readproc, so snap.c has gone away completely. 'skill' should actually work now, but you may have to use '-c', '-u', etc. to actually get it to parse the command line correctly. *** Significant changes in psdevtab inverse device name resolution ------------------------------------------------------------------ Extended semantics of the -n (numeric) option to output the full device number in hexadecimal for the tty field. That way if /etc/psdevtab cannot be created rescanning the /dev directory can be short-circuited. Fixed incorrect file creation mode for /etc/psdevtab. I just forgot to alter my original 0 mode to something reasonable like 0664. Added fallback locations for psdevtab. First it tries /etc/psdevtab, then /tmp/psdevtab and then $HOME/.psdevtab. Also, decided to go ahead and create the devtab file with regular old write instead of the rw mmap. I still read it with mmap, but there should be no trouble with that even in ancient kernels. Also changed the semantics such that if any devtab file is found, it is assumed to be correct regardless of the relative timestamps of /dev and the file. Hopefully all this will avoid any unnecessary slowness. I'm still willing to reactivate the older somewhat broken code to do the mapping without any file as a fallback if the file doesn't exist. *** Significant changes in psdatabase/WCHAN inverse name resolution ------------------------------------------------------------------- libproc reads directly from System.map, so psupdate and /etc/psdatabase are no longer necessary. Hopefully this will make kernel configuration management simpler requiring only the zImage and System.map, which being the stripped (compressed) kernel and the symbol table before stripping are natural complements. This is probably how things should have been all along even going back to kmem ps days four years ago. Oh well. This change should make dealing with x86, AXP, Sparc, etc binary formats for kernels a lot easier. All that is required of System.map is that there be exactly 3 space delimited columns: "address[single space]anything_with_no_spaces[single space]symbol[newline]" [ Well, ok, the addresses have to be zero padded so that lexicographic order is the same as numerical order and the addresses all have to be the same ascii length and I haven't tested to see how resilient it is to bogus internal records like multiple newlines in a row. Hopefully aren't editting and commenting their System.map files. ;-) This could actually work on "sort < /proc/ksyms" also if we generalize the behavior to work with either two or three columns. ] We take advantage of the following files in this order: PS_SYSTEM_MAP # may only point to System.map, not psdatabase /boot/System.map-`uname -r`, # Note: this is the preferred path /boot/System.map /lib/modules/`uname -r`/System.map /etc/psdatabase /boot/psdatabase-`uname -r`, /boot/psdatabase, /lib/modules/`uname -r`/psdatabase The reason for the /lib/modules/*/file location is that I imagine many people have enough trouble keeping track of kernel version-dependent files in the filesystem as it is, so I didn't want to invent a new place. I keep things in /boot myself and don't usually have more than 8 or so kernel versions, so this works for me. I know not everyone uses modules, but it's just a search path folks... In case it isn't obvious from all of the above, this means that psupdate is no longer necessary. I include it in this release and include recognition of it because I realize that some distributions may have scripts which depend on the old semantics. I doubt there will ever be a compelling reason to not include support for generating or reading the old psdatabase files, but they aren't necessary anymore if you have the System.map files from the kernel builds. I'm not 100% sold on the ordering of the search path, but I think it makes sense. If you have reasons why it should be different I may be convincable. Also I'm interested in exactly what the output of 'nm' looks like on Alpha, Sparc, etc., architectures. It should be easy enough to adapt the code if it is basically the same format of <0 padded hex> ... \n. Thanks to Helmut Geyer for the idea of living off the System.map file natively and Mike Dean for the idea of using an approximate binary search instead of padding out the lines of System.map with tons of spaces to get equal record lengths. The cost of doing it approximately is mild, mostly consisting of lots of scans to get to the next or last newline and a logarithmically few extra steps to get to the desired record. Only an order of magnitude guess for the record length is necessary. The code is all mine, though, so all bugs are due to me alone. NEWS for version 0.99a of procps ================================ This is a quick bug-fix release to solve a few thorny problems with my probably overzealous attempt to use the inline-assembly string.h and a Makefile bug or two. It also fixes free to +/- the cached column too and makes it ignore the new extra-pretty non-numeric lines that /proc/meminfo is spitting out. It also fixes the lack of set_linux_verion() in 'w' that caused no command line to be displayed. I am still working on a much condensed 'w' that should be a lot easier to maintain and a readproctree that should be usable by both 'ps', 'pstree', and 'w'. Apparently memory-mapped files are pretty broken before the early 1.3.X kernels so I may have to rewrite devname.c to not use MAP_WRITE to create psdevtab. Some people have been claiming that /dev changes at boot-up in some rc scripts. I'm not really sure why they would want to do that. Seems kind of paranoid to continually re-make /dev/log. Anyhow, I'm open to suggestions for psdevtab behaviors. I've been thinking a /tmp/psdevtab fallback (with a careful world readable umask to avoid repetition) or maybe a $HOME/.psdevtab fallback too. NEWS for version 0.99 of procps =============================== This file is a brief catalog of new features or developments in the package. For general information about using the programs see their man pages. NEW PACKAGES OR PROGRAMS ======================== LIBPROC I've modularized some routines and fixed some long standing bugs. Replaced the regex() recognition of /proc/PID with a simple check of the first character of the filename being a digit which should be just as safe. Added an opendir/readdir/closedir style interface to the process table. The new interface seems cleaner, more intuitive and generally more applicable (to me anyway). The only program which uses the new interface is ps. 'w' will follow soon. 'top' may take a while longer... openproc,readproc, and closeproc are implemented. I still want to do readproctab and rewindproc, too though. Added some kernel and package versioning things to make it easier to be run time adaptable. Also updated sysinfo to understand any /proc/meminfo. A /proc/stat parser should probably be in there as well with the appropriate updates to vmstat and xcpustate. The general direction procps should move in is lightweight command-line or X11/Motif display/format programs and compartmentalized libproc routines to parse all of the /proc files. This isolates the utilities from kernel versioning. TTY DEVICE NUMBER TO NAME RESOLUTION Tty device name <-> number mapping has been completely generalized. It now stat's every character special file in /dev and builds a memory mapped table of device names indexed in a way that makes lookup of name from number a fast, constant time process. The extra overhead incurred by building /etc/psdevtab is non-negligible if you have a large /dev and permissions to write the file (or its directory) are required to update the file (which is done if it does not exist or if /dev is newer than /etc/psdevtab). Hence `root' should `ps' shortly after any modification to /dev (or chmod 666 /etc/psdevtab :-) to avoid ordinary users rebuilding it over and over. Since such modifications are rare, hopefully having a fallback $HOME location will not be necessary. If the file is up to date, the overhead incurred is very small. The generality bought is essentially optimal since `ps' tailors its notion of name<->devno mapping according to the /dev of the local system which is the canonical repository of this information. In principle the name database could encompass all device majors. The file would be large, but since I use mmap to access it, only the pages with the major of interest are ever actually read off the disk. Right now I just use the majors 2,3,4,5,19,20 which should cover both old and new systems with both master and slave devices (I know... no reason for the masters... :-) and the multiport serial devices. Also the 'mknewpty' script is provided to update your /dev directory to the new pty master/slave devices. The tty abbreviation scheme has been rationalized to match device special files. The leading "tty" or "cu" is stripped, so cua3 -> a3, tty1 -> 1 and ttyp9 -> p9. The t flag in ps now works with a full device names and to pick up processes even if they aren't owned by the owner of ps, e.g. "ps tcua0" picks up gpm for everyone. This seems desirable. WATCH A little program similar to another called 'vis' which simply re-displays in a polling fashion the output of other programs. "watch ps --sort:utime" might be dubbed a poor man's 'top'. Though this has been included in procps for some time it hasn't been built or installed by default. It is now. SKILL/SNICE I have written the necessary machine-dependant file for 'skill' and tested it somewhat under Linux. It seems to mostly work, but there are probably a few glitches. This is a generalization of the 'killall' concept. You can send signals or change priority based upon user, command basename (the same that 'ps c' gives), terminal, etc. If you have a user named 'satan' "skill -u satan" will kill all their processes. :-) See the man page for more details. An annoyance of the current implementation is that although permission to send signals is based upon the real user id, /proc only gives the effective uids of processes. Hence processes which you *could* kill because they're suid-root (X say) won't be detected as kill-able. Either /proc + readproc need to be updated to report the *real* uid to skil or skill needs to try to send the signal even if the uid doesn't match. CHANGES TO OLD PROGRAMS ======================= MAKEFILE The directory hierarchy has been restructured. It is now easier to have the multiple components to the suite under nearly autonomous administration. The library code has also been moved to a subdirectory. The best thing about the new setup is that things like Imake generated Makefiles with preconceived notions of 'make install' can be used without getting into the business of re-writing component package makefiles. There is now an option to build a shared libproc.a which reduces 'ps' and 'top' sizes by about 10K apiece. Simply change the value of SHARED. Also, one may optionally install the library header files and archive/shared object files into standard system directories. There are no library man pages yet, but the headers are fairly descriptive. PS Several long standing bugs have been fixed and much of the internal code was re-written to use my new directory-style interface to the process table. In particular if sorting is disabled (with '-o') the process entries are output to the terminal as soon as possible (making it more helpful under heavy system load). I am considering several new additional features to `ps' including regex filtering of which processes to list, "grep -s" silent testing for existing of processes matching criteria, run-time/user-defined output formats. I would also like to completely phase the w,top code which uses the snapshot interface instead of the 'readproc' interface. And of course adding long options for the rest of the options would be nice too (I may not get around to doing this anytime really soon so patches which implement any of these things would most likely be gleefully accepted). PSUPDATE psupdate has been updated to work with ELF kernels. If you compile it as an ELF binary it will handle both a.out and ELF kernels. If you compile it as an a.out binary it will only handle a.out kernels. Many thanks to Jeff Uphoff. psupdate has also been updated to work with any binary type supported by libbfd. This is the default configuration. Many thanks to David Mossberger-Tang. TOP A user-defined format would be nice here too. Alternate sorting criteria (top memory users instead of top CPU users, etc.) may be another interesting alternative. Of course the sorting in ps can do all of that, but it doesn't have any optimal screen update action going down... :-)