*********** THIS IS THE FINAL RELEASE OF VERSION 2 OF LSOF. *************
| |
| Version 3 of lsof is now available. Look in this directory for: |
| |
| lsof_3.<level>.tar.gz |
| |
| (<level> is the release level, 0 as of 24 May 1994.) |
| |
| Vic Abell |
| |
*************************************************************************
Notes for the distribution of lsof version 2.36
Lsof (for LiSt Open Files) lists files opened by processes on selected UNIX
systems. It's my update to fstat (comp.sources.unix volume 18, number 107)
and ofiles (volume 18, number 57). A description of the changes lsof has
undergone to reach its current version is in What's new in Version 2.36?
---------------------------
Lsof is a complete redesign of the fstat/ofiles series and its closer parent,
lsof 1.09. It has been tested on:
AIX 3.2.[1234] for the IBM RISC/System 6000
BSDI BSD/386 1.0 for PC compatibles
EP/IX 2.1.1 for the CDC 4680
FreeBSD 1.0e for PC compatibles
HP-UX [789].x for HP systems (some combinations)
IRIX 5.1.1 for SGI systems
NetBSD 0.9a for PC compatibles
NeXTStep 2.1, 3.0, 3.1 for NeXT work stations
OSF/1 1.[23] and 2.0 for DEC Alpha work stations
Sequent Dynix 3.0.12 for the Sequent Symmetry
SunOS 4.1.[123] for Sun 3 and 4
SunOS 5.1 (Solaris 2.1) for Sun 4 systems
SunOS 5.3 (Solaris 2.3) for Sun 4 systems
Ultrix 2.2 and 4.2 for DEC work stations
Although it has not been tested on them, lsof will probably work on AIX
3.1.[357], EP/IX 1.4.3, ETAV 1.17, IRIX 4.0.5, NeXTStep 2.0 and SunOS 4.1.
(It used to work on those UNIX dialects, but I no longer have access to
them for testing.)
Using available kernel data access methods -- getproc(), getuser(), kvm_*(),
nlist(), pstat(), read(), readx() -- lsof reads process table entries, user
areas and file pointers to reach the underlying structures that describe
files opened by processes.
Lsof interprets most file node structures -- cdrnodes, devnodes, fifonodes,
gnodes, High Sierra nodes, inodes, mfsnodes, procnodes, rnodes, snodes,
specnodes, s5inodes, tmpnodes. It understands NFS connections. It
recognizes FIFOs, multiplexed files, UNIX and Internet sockets. It knows
about System V streams. On many systems it recognizes execution text and
library references.
Lsof accepts options to limit and filter its output. That output describes
the process that has opened the file, the command the process is executing,
the owner of the process, the file descriptor of the file, and the file's
access mode, lock status, device, inode number, size or offset, file system
name and stream head name. Additional special output is provided for special
files -- e. g., the local and destination Internet addresses of Internet
socket files. (Lsof has a special filter that limits output to the listing
of Internet socket files having designated protocol usage, host name or
address, or service name or port.)
Lsof may be used and distributed freely, subject to the limitations described
in its source files.
What's new in Version 2.36?
---------------------------
This is a list of the changes that have led to version 2.36.
* The version 1.09 sources were reorganized and broken into smaller
files. There are three header files -- one for includes and
defines, one for function prototypes and a third for machine-
dependent definitions.
* Lsof understands some System V platforms: the ETA-10P* running
Release 3.1 and Lachman Associates, Inc. TCP/IP Release 3.0;
Silicon Graphics Indigo systems running IRIX 4.0.5 and 5.1.1;
CDC 4680 systems running EP/IX 1.4.3 and 2.1.1.
* Lsof has a security compilation option, enabled by defining the
HASSECURITY symbol (e.g., in the Makefile or in machine.h). When
the security mode is enabled, only the root user may list all
open files; the non-root user may list only open files whose
processes have the same user ID as the real user ID of the lsof
process (the one that its user logged on with). Lsof is
distributed with the security mode disabled, but there is a
skeleton for defining it in the machine.h header file.
* Lsof has a SLOWDEV mode for systems whose /dev directory tree is
deep and whose stat() function is slow. This mode is activated
with the -T option and prevents lsof from plumbing the depths of
the /dev tree. When the mode is active, lsof may be unable to
associate /dev path names with all major/minor device number pairs.
This mode is enabled for EP/IX 1.4.3, because it takes a minimum
of 27 seconds to stat() all the entries in its /dev tree. The
mode is no longer needed for EP/IX 2.1.1.
Note: at versions 2.07, 2.08 and 2.09, when SLOWDEV was enabled,
the -T option inhibited a full /dev search; at version 2.10 -T
enables a full search.
* An attempt has been made to make the lsof sources ANSI C compliant.
Compliance has been tested with the -ansi and -pedantic options of
the NeXTStep gcc compiler. The compliance changes have been
verified to compile without error on all other available platforms.
However, there may be older platforms or untested ones where the
changes cause compilation errors.
* In version 2.09 the timeout handling of stat() calls, particularly
on inaccessible NFS directories, was improved, thanks to a
suggestion from Benson I. Margulies <benson@odi.com>.
* In version 2.10 the Margulies stat() timeout suggestion was
significantly extended to handle more systems and situations.
* In version 2.11 the interpolation of symbolic links was extended to
directory names, obtained via the getmntent() function, improving
the usability of lsof under HP-UX.
Steinar Haug <Steinar.Haug@delab.sintef.no> pointed out the need
for this addition.
* At Steinar Haug's suggestion I added the -i network address option
in version 2.12.
* At version 2.13 I enhanced network address argument processing
and correctly allocated the user area buffer for swapped DYNIX
processes.
* I added a UID cache at version 2.14 to improve speed on systems
with many processes and many users.
* I added SunOS support at 2.15 to read the current working directory
and root directory paths, thanks to a hint from Carl Johnson
<carlj@cyclone.bt.co.uk>.
* I added SunOS 5.1 (Solaris 2.1) support at version 2.16, thanks to
Dave Curry <davy@ecn.purdue.edu>.
* February 24, 1993: I changed Makefile generation to produce more
generic Makefiles. No source code changes were involved, so the
version number didn't change.
* April 12, 1993: at the suggestion of Dave Stevens of the Purdue
University Computing Center <dls@cc.purdue.edu> I added better
support in version 2.17 for raw sockets, especially determining
Internet addresses for applications like ping. This support is
uneven, because it depends on how a given UNIX OS supports raw
socket addressing. The changes of version 2.17 have not been
tested on older OS dialects -- e.g., AIX 3.1.x, HP-UX 7.x, etc.
* May 11, 1993, version 2.18: in response to a bug report from Greg
Earle <earle@isolar.Tujunga.CA.US>, I added support for Sun High
Sierra file system nodes. This support allows one to search for
processes using CD-ROM files, for example. The code has been tested
under Solaris 2.1 and SunOS 4.1.3.
The High Sierra support code exposed a difficulty with identifying
the major/minor device numbers of some SunOS and Solaris files. It
seems that both systems will return different major/minor device
numbers for the directory on which a CD-ROM is mounted (e.g.,
/cdrom) and the file system associated with it (e.g., /dev/sr0).
Further, some Solaris device values can't be converted to major/
minor device numbers with the makedev(3) functions; lsof prints
such device values as one hexadecimal number.
I fixed a bug in the SGI file pointer scan loop in response to a
report from Dave Olson <olson@anchor.esd.sgi.com>.
* May 24, 1993 -- I corrected an incompatibility with AIX 3.2.3. Its
strncpy() is now a built-in and can't be split by a #if. The fix
was supplied by Scott J. Ellentuch <scoell@stormking.com> and Horst
Luehrsen <Horst.Luehrsen@Informatik.Uni-Erlangen.De>.
* July 1, 1993, version 2.19: in response to a request from Jos
Vos <jos@bull.nl>, I added network address to host name and port
number to port name conversions. I added the -H flag to disable
host name conversion; -P, port name.
* July 22, 1993, version 2.19: at NeXTStep 3.1 it is no longer
possible to use the -ansi and -pedantic compiler flags to check for
ANSI C compliance. The flags cause compilation errors in system
header files. The Makefile for NeXTStep 3.1, Makefile.next31,
reflects this sad fact.
* August 13, 1993, version 2.20: I added code for SunOS to skip
automountable file systems that are not mounted. The change was
suggested by Dominique Petitpierre <petitp@divsun.unige.ch>.
I shifted ANSI C conformance testing to gcc 2.3.3 under SunOS 4.1.3,
because of system header file problems under NeXTStep 3.1. The
CDEFS macro for gcc is:
CDEFS= -ansi -Dsun
* August 17, 1993, version 2.21: I added code to display SunOS and
Solaris text file usage. I added code to handle readlink() and
stat() deadlocks better, including the new options "-m" and "-S t".
* September 10, 1993, version 2.22: I updated CLONEMAJ and N_UNIX
definitions for SunOS 5.1 (Solaris 2.1) per information received
from Casper Dik <casper@fwi.uva.nl>.
* September 16, 1993, version 2.23: I updated EP/IX support to OS
version 2.1.1. Theoretically the EP/IX 1.4.3 support should still
work, provided the Makefile has "-D_EPIXV=10403".
The SLOWDEV definition was removed for EP/IX 2.1.1. It remains
27 for EP/IX 1.4.3.
* October 14, 1993, version 2.24: I completely revised the breaking
of NFS deadlocks in response to a discovery that the AIX 3.2.4
lstat() call can only be broken with a SIGKILL. Lsof now does
system calls that have NFS deadlock potential -- lstat() and
readlink() -- in a child process, retrieving the output via a
pipe, limiting the read via a SIGALRM, and stopping a deadlocked
child process with a SIGKILL.
Version 2.24 has a correction that makes it possible to search
for EP/IX 2.1.1 files by name.
* October 20, 1993, version 2.25: I added code, provided by John
Silva <johns@hpwarf.wal.hp.com>, that prints HP-UX [89].x text and
memory region nodes. The -L option was enabled for HP-UX [89].x
to allow the printing of duplicate text and memory region nodes.
I added rudimentary support for HP-UX [89].x link level access
files.
I removed a trailing `/' from path arguments longer than one
character to make file system name matching possible. The bug was
reported by John Silva <johns@hpwarf.wal.hp.com>.
I made yet another correction to make it possible to search for
EP/IX 2.1.1 files by name and file system.
I corrected some serious omissions and bugs in the version 2.24
deadlock breaking code. A close() and wait() were missing, and
the child process was using exit() instead of _exit(). The
problems only seemed to bother the Solaris version of lsof.
* November 14, 1993, version 2.26: I added support for SGI IRIX 5.1.1,
thanks to much help from Dave Olson <olson@anchor.esd.sgi.com>.
There are now separate Makefiles for IRIX 4.0.5 and 5.1.1.
All user ID references are now type cast uid_t to correct problems
in the UID cacheing algorithm, used by printuid() in print.c.
* December 2, 1993, version 2.27: I added changes for SunOS 5.3
(Solaris 2.3) to display socket information correctly, courtesy of
Casper Dik <casper@fwi.uva.nl>. Kernel structures for SunOS 5.3
sockets whose connections originate locally no longer contain the
local network address -- hence lsof displays * for the INADDR_ANY
value they do contain.
I added support for CCITT x.25 sockets under HP-UX 8.x and
(presumably) 9.x, courtesy of Pasi Kaara <Pasi.Kaara@atk.tpo.fi>.
Pasi also helped find a couple bugs in the HP-UX [89].x handling
of virtual file system names.
* December 20, 1993 (no version number change): I added display of
x.25 socket's PCB. I changed the Solaris Makefile to use the GID
for sys. I added fix to allow IRIX 4.0.5 usage, based on bug report
and testing by Brian Silver <silver@ctron.com>.
* January 11, 1994, version 2.28: I ported lsof to OSF/1 1.[23] for
the DEC Alpha. Anthony Baxter <anthony.baxter@aaii.oz.au>, Dwight
McKay <mckay@gimli.bio.purdue.edu>, and Jeffrey Mogul
<mogul@pa.dec.com> gave generous assistance. Dwight provided the
test system; Anthony and Jeffrey advised on OSF/1 matters.
* January 26, 1994, version 2.29; I ported lsof to OSF/1 2.0 for the
DEC Alpha. Axel Clauberg <clauberg@rrz.uni-koeln.de> and Claus
Kalle <kalle@rrz.uni-koeln.de> graciously provided a test system.
Axel provided a critical clue to the organization of the
<sys/proc.h> header file that enabled me to accomplish this port.
* February 12, 1994, version 2.30: I ported lsof to Ultrix 2.2 and
4.2 for DEC work stations. The system to which the 2.2 port was
directed is a local one that has been extensively updated with
4.3BSD{Tahoe,Reno} network features, so it may not match a
standard 2.2 system, if there is any such system still in use.
Terry Friedrichsen <terry@venus.sunquest.com>, Dwight McKay
<mckay@gimli.bio.purdue.edu>, and Jeffrey Mogul
<mogul@pa.dec.com> gave generous assistance. Dwight provided the
test system; Jeff and Terry advised on Ultrix matters.
* February 17, 1994, version 2.31: this is a bug fix release. It
includes fixes to:
o Allow specifying more than one file or file system argument;
o Display correct SunOS 4.x VCHR inode numbers -- e.g., /dev/kmem,
/dev/console -- and allow searching for them by name in versions
of SunOS older than 4.1.3;
o Search for OSF/1 /dev/ptyp? files by name, even though there is
no inode number in the kernel open file structures for these
files that corresponds to the inode number available from the
stat() function call.
Terry Friedrichsen <terry@venus.sunquest.com> reported this bug.
Jeffrey Mogul <mogul@pa.dec.com> provided conclusive evidence
that the inode number does not exists in the kernel open file
structures.
* February 25, 1994, version 2.32: I ported lsof to BSDI BSD/386 1.0,
FreeBSD 1.0e, and NetBSD 0.9a for PC compatibles.
Bill Bormann <bormann@vm.cc.purdue.edu> provided the FreeBSD test
platform. Dave Stevens <dls@mace.cc.purdue.edu> provided the
BSDI BSD/386 test platform.
Sean McDermott <spm@staff.cc.purdue.edu> did the NetBSD 0.9a
testing.
I added code to the handling of NFS deadlocks to time out the wait
for a child process to complete. The time-out is accompanied by a
warning that the child process may be hung.
I fixed a few minor OSF/1 bugs.
I corrected an #if test that made it impossible to compile misc.c
under IRIX 4.0.5. Bob Mende Pie <mende@piecomputer.rutgers.edu>
supplied the correction.
* March 10, 1994, version 2.33: I added ADVFS/MSFS file system support
for DEC OSF/1 1.3a. This has not been tested under versions 1.2
or 2.0 of DEC OSF/1.
Achim Bohnet <ach@mpe-garching.mpg.de> and Bernt Christandl
<beb@mpe-garching.mpg.de> graciously provided test time on a 1.3a
system with the ADVFS/MSFS layered file system product.
I fixed a Solaris 2.[13] bug that prevented proper lookup of socket
streams. Steve Kirsch <stk@infoseek.com> reported the bug and
graciously provided test time for locating and fixing it.
* April 13, 1994, version 2.34: I fixed some minor bugs, including:
using Purdue DYNIX's /etc/passwd stay-open mode; handling an
empty /etc/services file without causing a segmentation fault;
handling Unix domain sockets consistently; eliminating an IRIX
reference to a virtual memory region pointer that is obsolescent.
* April 19, 1994, version 2.35: I extended the /etc/passwd stay-open
mode handling to another Purdue dialect: Ultrix 2.2.
* May 2, 1994, version 2.36: a child process, blocked by NFS, is now
sent both the SIGINT and the SIGKILL signals in an attempt to
terminate it. David DiGiacomo <dd@mv.us.adobe.com suggested this.
Victor A. Abell <abe@cc.purdue.edu>
Purdue University Computing Center
May 24, 1994