home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 3 / 3300 / pff.doc < prev    next >
Text File  |  1991-05-06  |  7KB  |  173 lines

  1. pff (process-file-file, with emphasis on the ff) shows running processes
  2. and their open files.
  3.  
  4. Examples are worth a million words, so here's a sampling of how I've
  5. used pff (updated to reflect the latest option set). -swhatever can be
  6. abbreviated as -sw.
  7.  
  8. pff -asfull > ~/log
  9.         Full report on everything pff can see. Useful when the
  10.         system is dying and you want to know what's going on.
  11. pff -astiny    One line per process that has anything open, with each
  12.         open file noted but not explained.
  13. pff #221 #17484    All files those processes have open. (# is redundant.)
  14. pff -aspids    All active pids. (This isn't as fast as it could be.)
  15. pff -a | more   All open files, in my favorite format.
  16. pff /etc/passwd Who's snooping?
  17. pff /etc/telnetd.old    
  18.         Who's running the telnetd.old program? (Useful after
  19.         you've installed a new telnetd and want to make sure
  20.         nobody's using the old one. Might not work on Sun 4s,
  21.         where processes don't have their programs open except
  22.         possibly as mmaps.)
  23. pff -d/nfs.vlsi1
  24.         Who's keeping that filesystem busy? (-d is redundant.)
  25.         If this doesn't show anything, and the filesystem in
  26.         question doesn't contain another mounted filesystem,
  27.         then you should always be able to unmount it.
  28. pff -f/usr/dead Who's in that directory? (-f redundant.)
  29. pff -stiny /acf5.h
  30.         Short report on who's using my filesystem.
  31. pff /dev/ttyp7  All open files---including cttys---giving access to my tty.
  32. pff -sbrief -ujoe
  33.         All files open by user joe. (This does not show
  34.         files *opened* by user joe, or files *owned* by user
  35.         joe, or processes with a different effective uid, though
  36.         I suppose pff could be adapted to handle those cases.)
  37.         You can use uids, like pff -u195.
  38. pff -slong /tmp/. /tmp/*
  39.         How are people using /tmp? (Somewhat detailed report.)
  40. pff -i0        Who's using the Internet?
  41. pff -ismtp    Who has the SMTP port open? (Compare to fstat.) You can
  42.         use numeric port ids, like pff -i25.
  43. pff -sbrief `pff -spids ./data`
  44.         All files open by all processes accessing ./data.
  45. pff -snames    All files open, with pathnames. (Only works if you have
  46.         findinode installed.)
  47.  
  48. Although pff can handle any number of options at once---e.g., ``show me
  49. every open file on /acf5.h, or on /usr, or on Internet port 25, not to
  50. mention /dev/null''---I rarely want to see a combined view.
  51.  
  52. And now, the options:
  53.  
  54. -u uid  tells pff to show all processes running with a given effective uid.
  55. -p pid  tells pff to show the processes with that pid.
  56.  
  57. If pff is not given any -u or -p options, it shows all processes. (This
  58. doesn't mean it will actually print anything, since by default it only
  59. shows open files, which are controlled by the following options.)
  60.  
  61. Note that pff can be compiled with a security option (-DSECURITY) which
  62. currently restricts the report to processes with the same real uid as
  63. the invoker of pff. This restriction is not applied if the real uid is
  64. root or if pff is not setgid. (If you only want to see root processes as
  65. root, use -x.)
  66.  
  67. -f foo  tells pff to show every open file referring to file foo.
  68.         Note that all devices with the same remote device are
  69.     considered to be the same file, even when they are not.
  70. -d fs   tells pff to show every open file on the given filesystem.
  71. -i port tells pff to show every inet connection to the given local port.
  72.     Port 0 refers to all inet connections.
  73.  
  74. -a      tells pff to show all open files for the selected processes.
  75.     This option is automatically turned on under -p and -u.
  76.     It is ignored under -f, -d, and -i. In other words, the only
  77.     time it makes a difference is when you have no other options
  78.     (except maybe -s), and I hate having a program spew mounds of
  79.     garbage at me just because I forgot to specify which particular
  80.     mound to spew.
  81.  
  82. -s style tells pff to use a particular output style. Only the first
  83.     letter of the style matters. Style brief is close to fstat and
  84.     the Abell ofiles; style uidlong includes file flags, offset,
  85.     credentials, etc., and style long prints users by name if possible.
  86.     Style default, in the middle, is my favorite. Style full has the
  87.     most information (including per-process information) but is
  88.     relatively unstructured. Style tiny is close to the Dupuy ofiles.
  89.     Style pids prints pids only. Style names includes filenames.
  90.     -shelp shows all styles available; -sHelp shows all styles
  91.     available and gives descriptions.
  92.  
  93. Any further arguments are interpreted as follows: any that start with /
  94. or . are taken to be files; any that start with # are taken to be pids;
  95. any that are entirely numeric are taken to be pids; and the rest are
  96. taken to be files. ``Files'' means -f *and* -d here; ``pids'' means -p.
  97.  
  98.  
  99. Notes on #ifdefs (possibly out of date):
  100.  
  101. STAT_TIMEOUT in mntops.c, fine.
  102. *_H in *.h to handle repeated inclusion.
  103.  
  104. IPPROTO_* in printprotoinet.c to handle different IP protocol support.
  105. RLIMIT_* in printrlimits.c to handle different rlimit support.
  106. DTYPE_* in printftype.c to handle different descriptor type support.
  107. AF_* in printfamily.c to handle different address family support.
  108. S* in printpstat.c to handle different process status support.
  109.  
  110. UTMP_FILE used in load.c. Hmm.
  111. SIDL used for a bit of SIDL-specific stuff in pff.c. Hmm.
  112. S_IFIFO enables some FIFO-specific stuff in various files. Hmm.
  113.  
  114. REMOTESIZE, NETSTAT* in netinp.c for various internal purposes. Ungood.
  115. NOSTAT_* in getmnt.c for various internal purposes. Ungood.
  116.  
  117. FILE, IPPROTO_TCP, FHLOCAL, MSIZE, MNTMAXSTR, NFS_RETRIES, SOCK_STREAM,
  118. RTF_UP, SS_ISCONNECTED, RLIM_NLIMITS, bool_t: wrappers around #include
  119. files. It is disgusting that any of these are necessary.
  120.  
  121.  
  122. TODO:
  123.  
  124. DO ERROR CHECKING! pff.c, getnode.c, and getvmseg.c are ridiculously
  125. fragile.
  126.  
  127. Move printbuf and printsbuf into getnode.c and getsocket.c...
  128.  
  129. security: what about reporting on files owned by user?
  130.  
  131. give better reports on pipes on Ultrix? other file types?
  132.  
  133. fix up include files in Makefile! aargh, should've used mick
  134.  
  135. Allow more socket selection options?
  136.  
  137. Automatically put in names when they're known from multiple -f?
  138.  
  139. Make sure all characters are printable? Option? Don't print sock name?
  140.  
  141. :port arg? nah
  142.  
  143. deal with mount points to catch non-unmountable /usr/spool because
  144. /usr/spool/mail is mounted? nah
  145.  
  146. put back numeric styles as undocumented/deprecated? nah
  147.  
  148. do something about scandev slowness? cache info?
  149.  
  150. do something about stat'ing downed filesystems? cache info?
  151.  
  152. cache usernames, portnames, etc.?
  153.  
  154.  
  155.  
  156. Some notes on typical execution profile on a Sun:
  157.  
  158. 57% of the time is in read(), most of that from kmemcpy(), an
  159. obnoxiously large amount from Sun's kvm library. Of the kmemcpys, 40%
  160. are from getsocket, 40% are from getvmseg, 15% are from getnode, and 5%
  161. are from getpcred.
  162.  
  163. 18% goes to stat()s from scandev(). Hmmm. There are 243 entries in /dev,
  164. but only 38 unique devices in the pf output, and only 7 of those are
  165. anything but pseudo-ttys. (On another machine, there are 800 entries in
  166. /dev. Ugh!)
  167.  
  168. 11% of the time is in _doprnt(). It would be worthwhile to replace all
  169. printf's in pff.c with calls to a simpler string/number format package.
  170. stdio and printf really are too complex for typical output programs.
  171.  
  172. 7% goes to nlist(), half of that from Sun's kvm library.
  173.