47 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| Warning:
 | |
| 
 | |
| This code must corrctly handle lots of picky little details to meet
 | |
| the Unix98 standard while simultaneously being as compatible as
 | |
| possible with the original Linux ps. Don't "fix" something without
 | |
| considering the impact on all the special-case code. For example,
 | |
| the "tty" format _must_ use "TT" as the header, even though the SysV
 | |
| output formats _must_ use "TTY".
 | |
| 
 | |
| File overview:
 | |
| 
 | |
| display.c     main(), debug code, iterates over processes
 | |
| escape.c      Does stuff like \202 and < to command and environment.
 | |
| global.c      Data + code to init it.
 | |
| help.c        Help message.
 | |
| output.c      Giant tables and lots of output functions.
 | |
| parser.c      Initial command parsing.
 | |
| select.c      want_this_proc() checks a process against flags & lists
 | |
| sortformat.c  Parses sort & format specifier lists. Picks output format.
 | |
| stacktrace.c  Debug code, not normally used.
 | |
| ../proc/*     Library used to gather data.
 | |
| regression    Regression tests that ought to be run.
 | |
| common.h      Lots of interesting stuff.
 | |
| Makefile      Makefile
 | |
| p             Script used to test ps when the library is not installed.
 | |
| utf           Empty file used to test "ps ut?" unmangling behavior.
 | |
| ps.1          Man page.
 | |
| 
 | |
| Operation:
 | |
| 
 | |
| Unless the personality forces BSD parsing, parser.c tries to parse the
 | |
| command line as a mixed BSD+SysV+Gnu mess. On failure, BSD parsing is
 | |
| attempted. If BSD parsing fails _after_ SysV parsing has been attempted,
 | |
| the error message comes from the original SysV parse.
 | |
| 
 | |
| Control goes to sortformat.c, which must pick apart ambiguous options
 | |
| like "O". Failure can reset the whole program and set PER_FORCE_BSD,
 | |
| which means a second trip through parser.c and sortformat.c.
 | |
| 
 | |
| The choice of output format happens in sortformat.c. There is a switch()
 | |
| with all the valid format_flags combinations. The SysV and default
 | |
| options are NULL (unless overridden by personality), which causes a
 | |
| trip through SysV output format generation hackery. Note that the
 | |
| default format always goes through there, even if it is for BSD.
 | |
| Formats that came from the switch() (generally BSD, plus overrides)
 | |
| get mangled a bit to support various SysV output modifiers.
 |